目录
6、git pull — 从远端拉取(fetch)代码并合并(merge)
QA必备 — git
正常提交代码流程:
git status # 检查下工作区有哪些变动
git add <file_path> # 将要提交的变动添加到暂存区
git commit -m "message" # 将变动内容由暂存区提交到版本库
git push origin <remote> # 提交到远程分支
但实际中并非如此顺利,会遇到各种异常,要顺利解决异常,需对git操作熟悉。蓝色表示QA必会。
1、git clone <版本库的网址>
git clone <git_url>
作用:拷贝一个 Git 仓库到本地,本地目录名称与git 仓库同名。
操作:打开页面,单击复制仓库地址,打开终端进入指定目录后,执行git clone命令
2、git branch — 分支信息
1)查看分支
作用:查看分支(前面带有*
号的是当前分支)
-
查看本地分支
git branch
-
查看远程分支(origin/)
git branch -r
-
查看所有分支(本地+远程)
git branch -a
2)创建本地分支
作用:创建一个新的本地分支
-
创建但不切换
git branch <name>
创建完的test分支与当前master分支代码一致
-
创建且同时切换
git checkout -b <name>
创建完的test_new分支与切换之前的master分支代码一致
3)重命名本地分支
-
不强制重命名
git branch -m <old> <new>
-
强制重命名
git branch -M <old> <new> # 转换大小写
4)重命名远程分支
假设将”duoshan_pro“重命名为”master“
git branch -m duoshan_pro master # 本地duoshan_pro重命名为master
git push origin master:master # 将master推到远端
git push origin :duoshan_pro # 删除远端的duoshan_pro
5)删除本地分支
git branch -d <name> # -D 强制删除,
3、git status — 状态信息
红色表示修完完未追踪,绿色表示修改完已追踪
1)详细状态
git status
2)精简状态
git status -s
详细状态 精简状态
?? :新添加未追踪 (新增但未git add)
A:新添加到暂存区中的文件前面有标记(新增且已git add)
M:该文件被修改了并被放入了暂存区。 (修改且已git add)
R:被重命名且已放入暂存区。(修改且已git add)
M:该文件被修改了但是还没被放入暂存区(修改但未git add)
4、git add — 提交到暂存区
git add <file_path/path> # <path>可以是目录,也可以是目录下的具体文件
git add .:提交被修改(modified)和新文件(new)和文件,不包括被删除文件(deleted)
git add -u:提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add -A:# 提交所有变化
5、git commit — 提交到本地版本库
每次使用git commit 命令后,都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id。
git commit -m “message”
git commit --amend -m "new message" # 修改提交的描述信息
6、git pull — 从远端拉取(fetch)代码并合并(merge)
git pull <远程主机名> <远程分支名>:<本地分支名> # :前后无空格
1)建立新的本地分支
git push origin <remote>:<local> # -f 强拉
如:将远端分支T,拉到本地,且命名为jieqiong(此刻jieqong分支代码与远端分支T一致)
ps:git branch jieqiong也是建立本地分支,但建立完后的分支与本地所在分支一致
2)拉取最新代码到本地
git push origin <remote> # 如本地已经在当前分支,则本地分支可省略,如出错则,后加-f 强拉
注:更改分支代码之前,最好先git pull下,否则会发生冲突。
发生冲突后,将 <<< ===等行信息删除,重新git add、git commit、git pull、git push等。
(最简单的办法:去远程目标分支找对应的冲突文件,复制到本地对应文件,再git commit)
7、git fetch — 从远端拉取代码到版本库
作用:相当于是从远程获取最新版本到本地,不会自动merge。
git fetch origin develop:tmp // 拉取远程develop分支,并放到本地tmp分支上
git fetch orgin master //将远程仓库的master分支下载到本地当前branch中
git merge — 整合提交
作用:合并指定分支到当前分支,你需要往哪个分支上面合并,就要切换到哪个分支。
假设有一个开发分支dev,有一个主干分支master,现在要 把dev分支merge到master分支,保证两个分支都是最新的状态后,执行。
git checkout master
git merge dev
git push <远程主机名> <本地分支名>:<远程分支名>
# :前后无空格
1)建立新的远程分支
git push origin <local>:<remote>
建立远程分支test:即将本地test推向远端test,有异常则使用-f强制
2)推送到已有远程分支
git push origin <test> # 当前所在分支,与欲推送本地分支一致时,可省略本地分支
3)删除指定远程分支
git push origin :<test> # 用:号前的空格代替:号后的test分支,代表删除test
git push origin -d <test> # 二者等价,-D表强制删除
8、git checkout — 切换分支/恢复工作区
1)切换分支
git checkout <branch> # 切换已有分支
git checkout -b <branch> # 新建并切换分支,见 2-(2)节
2)撤销工作区的修改(未git add)
ps:未执行git add
git checkout -- <file> # 放弃在工作区的文件更改
git checkout . # 放弃所有文件的修改
9、git reset — 回退暂存区/版本库
适用场景:恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了。
1)撤销暂存区的修改(已git add)
git reset HEAD <file> # 放弃在缓存中的文件更改,回到git add之前状态
git reset HEAD . # 放弃所有文件的修改,回到git add之前状态
2)撤销版本库的修改(已git commit)
- --mixed:
git reset (--mixed) HEAD
,相当于默认--mixed
只动暂存区,不动工作区(修改内容不丢失),原节点和reset节点之间的所有差异都会放到工作目录中
git reset HEAD^ # 回退到上一个版本
git reset HEAD^^ # 回退到倒数第二版
git reset HEAD 版本号 # 版本号通过git log查看
3)带参数--hard/--soft的差别
- --soft:暂存区和工作区的内容都保持原样,不会被替换。原节点和reset节点之间的所有差异会放到暂存区中。
- --hard:暂存区和工作区的内容都会被新指向的commit提交内容所替换;git reset --hard只影响被跟踪的文件,如果工作区有新增的文件,并不会被影响。
10、git revert — 反做暂存区/版本库
适用场景:想撤销之前的某一版本,但是又想保留该目标版本后面的版本。
git revert -n 版本号 # 版本号可通过git log查看,或去gitlab 仓库查看可视化
继续git commit、git push 会生成新的版本号,而又不动到中间的版本。
ps:reset与revert的区别
11、git rebase — 重新设置基线
什么时候用到rebase? 当
1)git rebase branch
git rebase branch-B # rebase的是谁,就修改的是谁
两个分支都会有自己不同的发展轨迹:
1)git会把在branch-A上的C1之后的C3暂时存储到一个地方。
2)git会整合那些在branch-B(这个我们想要整合的分支)上的还未整合的提交到branch-A 中。
3)那些在branch-A的新的提交C3,会被重新应用到这个分支上。
缺陷:rebase 会改写历史记录(C3的源提交由C1变为了C4)。应该只使用 rebase 来清理你的本地工作,千万不要尝试着对那些已经被发布的提交进行这个操作,故:
- 不要在公共分支使用rebase
- 本地和远端对应同一条分支,优先使用rebase,而不是merge
2)git rebase --continue
在rebase的过程中,可能会出现冲突。在这种情况,git会停止rebase并会让你去解决冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引, 然后,你无需执行 git-commit,只要执行:
git rebase --continue
3)git rebase --abort
在任何时候,你可以用--abort
参数来终止rebase的行动,并且分支会回到rebase前的状态。
12、git stash — 暂存工作区
git stash # 暂存工作区的修改
git stash pop # 弹出修改内容
13、git log — 查看提交历史
- 建议提前git fetch一下
1)--stat:增改行数统计
git log --stat # 查看简略统计信息
--stat
选项在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。
2)--pretty:定制展示格式
git log --pretty=oneline # 每个提交放在一行显示
3)-p:展开内容差异
git log -p -2 # 展开显示每次提交的内容差异, 用 -2 则仅显示最近的两次更新
14、git diff — 比较两次修改的差异
1)比较工作区与暂存区
git diff # git diff 不加参数即默认比较工作区(未git add)与暂存区(git add之后)
git diff --stat #查看简单的diff结果
2)比较暂存区与版本库
git diff --cached # 对比暂存区(git add 之后)和版本库(git commit 之后)
3)比较工作区与版本库
git diff HEAD # 对比工作区(未 git add)和版本库(git commit 之后)
4)比较两个分支上最新提交
git diff branch-A branch-B
5) 比较两个历史版本之间的差异
git diff SHA1 SHA2 # SHA为40位的commit_id
1. 打开终端输入:ssh-keygen -t rsa ,按三个回车,密码为空,如下:
2. 输入:cat ~/.ssh/id_rsa.pub,将以ssh-rsa开头的所有序列复制到key框中,点击Add key按钮