Git
git架构
Git CMD 和 GUI
Git Bash --基于CMD,Bash在CMD的基础上新增了一些命令和功能,建议使用Bash更方便。
Git GUI --图形操作界面
配置用户
$ git config --global user.name "你的名字或昵称"
$ git config --global user.email "你的邮箱"
# 查看
$ git config user.name
$ git config user.email
ps: 注意git config命令的 --global 参数,
用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,
当然也可以对某个仓库指定不同的用户名和Email地址。
git操作
新建仓库并保存工作内容
# ==================
# 1. 创建仓库
# ==================
# 本地新建仓库(需初始化)后与远程关联
$ git init
$ git remote add origin "ssh或https"
$ git pull origin master
# 或远程仓库克隆到本地直接使用
$ git clone https://地址
# ==================
# 2. 提交到仓库
# ==================
$ git add . # 将当前目录所有文件添加到git暂存区
$ git commit -m "第一次提交" # 提交并备注提交信息
# ==================
# 3. 提交到远程仓库
# ==================
$ git push origin master #将本地提交推送到远程仓库
$ git push origin master -f # 强制推送
[ps]: git add
git add . 表示所有文件,也可指定文件,例如:
$ git add filename1.text # 指定单个文件提交
$ git add file2.txt file3.txt # 指定多个文件提交
更改仓库地址
# 仓库地址已存在的话先运行删除
git remote rm origin
# 设置地址
git remote add origin http://xxxxx.git
从远程仓库拉取(更新)代码至本地
注意:从远程仓库更新之前应该add
和commit
保存工作进度。
commit
提交工作进度会直接产生版本号,如果自己当前工作做了一半,并不想commit
,可以使用git stash
临时保存工作进度(往下看)。
从上面架构图中可以看出,有两种方法从远程仓库更新,pull(拉取) 和 fetch(获取) + merge(合并),
# ==================
# 方法一
# pull(拉取)
# ==================
git pull <远程主机名> <远程分支名>:<本地分支名>
# 例:
git pull origin master # 将远程origin主机的master分支拉取过来和本地的【当前分支】进行合并
git pull origin master:brantest # 将远程主机origin的master分支【拉取】过来,与本地的【brantest分支】合并
# ==================
# 方法二
# fetch(获取) + merge(合并)
# ==================
git fetch <远程主机名> <分支名>
git diff <分支名> # 与当前工作分支比较差异
git merge <分支名>
# 例1:
git fetch origin master # 获取 origin 主机的dev分支
git diff origin/master # 比较差异
git merge master # 将dev分支与当前工作的分支合并
# 等同于
git pull origin master:master
# 例2:
git fetch origin master:temp # 在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
git merge temp # 将temp分支与当前工作的分支合并
# 一句话总结git pull和git fetch的区别:git pull = git fetch + git merge
origin是什么
在克隆远程项目的时候,本地分支会自动与远程分支建立追踪关系,可以使用【默认】的origin来替代远程仓库名。
例如上面的: git pull origin master
,其完整写法为:
git pull https://gitee.com/xxx/xxx.git master:master
git stash暂存
使用git stash
临时保存工作进度。该操作会将当前修改过的文件且还未加入commit
中的保存起来。也就是架构图中的【工作区】和【暂存区】流程
# 贮藏
$ git stash save "save message"
# 贮藏起来后,分支状态会回到上次commit后的状态
恢复操作
# 准备恢复之前临时保存的工作进度
# 查看贮藏列表
$ git stash list
# 恢复并删除,num是可选项,通过git stash list可查看具体值。
$ git stash pop stash@{num}
# 恢复但不删除,num是可选项,通过git stash list可查看具体值。
$ git stash pop stash@{num}
# 恢复过后可能会有冲突,这时需要解决冲突
# 删除所有的贮藏
$ git stash clear
更新到本地出现冲突的解决办法
git pull
后提示
CONFLICT (content): Merge conflict in xxx
Automatic merge failed; fix conflicts and then commit the result.
# 意思为 合并冲突xxx文件 自动合并失败;修复冲突,然后提交结果。
如果有使用git ui管理工具,这步会舒服很多。
例如TortoiseGit
工具,直接在项目根目录右键=>TortoiseGit=>点击解决冲突
没有的话,就用bash吧:
检查每一个冲突的文件,手动修改,决定去留⭐
# 1. 查看当前状态
$ git status
# 2. 然后会列出你冲突的文件,接下就自己打开文件一个个解决吧
# 3. 解决完后
$ git add .
$ git commit -m "conflict"
烦死了
如果此时的冲突,令人烦躁,希望「恢复至更新前」或打算「舍弃本地仅要线上版本」时,可以进行如下操作:
(恢复至更新前)舍弃远程的版本,恢复本地版本:
$ git log # 查看历史版本
$ git log -p -1 # 这个显示最近的一次历史情况
# 例:
$ git log
commit 6a644126a7db0c66faf3b31549b62810f17b56ab (HEAD -> master)
Author: DeQ <630906612@qq.com>
Date: Wed Nov 18 22:27:48 2020 +0800
新提交
commit d3ffc145912ac496ff412d4741537ffa2d88b2e6
Author: DeQ <630906612@qq.com>
Date: Fri Jul 31 10:53:10 2020 +0800
# ****例end****
# 恢复到指定版本,commit后面的就是版本号
git reset --hard 版本号
# 例如上面: git reset --hard d3ffc145912ac496ff412d4741537ffa2d88b2e6
# 这时已经恢复到拉取之前的版本状态
舍弃本地的修改,让本地版与远程版一致
$ git fetch --all # 获取远程仓库
$ git reset --hard origin/master # 将远程仓库主分支覆盖到当前暂存区和工作区
# 注意:
# 如果你没有commit你的本地修改(甚至于你都没有通过git add追踪过这些文件,当他们被删除时,
# git reset –hard对于这些没有被commit过也没有git add过的修改来说就是具有毁灭性的,destructive!!)
# 也就是那些文件将找不回来!
仓库分支
多人协作开发时,应保持master(主分支)稳定,开发时根据实际情况用分支开发,完毕后再合并到主分支。
创建和推送分支
# 创建分支并将自己的工作切换到该分支下
$ git checkout -b develop # 在本地新建分支develop,并切换到该分支
# 推送分支, 需要先add和commit
# 推送到远程仓库 的 develop分支 (不存在分支会自动创建)
git push origin develop
从远程仓库更新指定分支
git pull origin develop:develop
其它一些操作
checkout
git checkout -f # -f相当于 “--force”, 强制移动指针,忽略本地变化
# 使用场景就是<复原>,比如写完 a=1; 并提交了;然后我们又试了a等于2等于3,但这部分我们并不想提交版本,这时复原内容,使用该命令即可。
查看分支
查看本地分支
git branch
查看远程分支
git branch -r
查看所有分支
git branch -a
切换分支
git checkout new-branch
删除分支
git branch -d 分支名
附 (git速查表)
git速查表 https://cheatsheet.wang/
SSH Keys配置
$ ssh-keygen -t rsa -C "youremail@example.com"
# -t:指定要创建的密钥类型
# -C:添加注释;
# 可以直接执行ssh-keygen
ssh-keygen
- 然后一路回车,使用默认值或根据提示输入希望保存的位置等信息。
- 默认生成位置在用户主目录里的.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对。
- id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
- 将id_rsa.pub文件的内容复制到托管平台的SSH Keys,然后就可以通过ssh连接免密拉取代码了。
指定id_rsa文件转pem操作(可以用来登陆服务器)
# 复制一份id_rsa文件并改名为id_rsa.pem
mv id_rsa id_rsa.pem
# 指定文件转pem
ssh-keygen -p -m PEM -f ./id_rsa.pem