上篇博客git学习笔记(三)写完了Pro Git 的第二章,这篇将会写完第三章。
Branch
创建新分支
$ git branch testing
转到另一分支下
$ git checkout testing
这是日志的,可以结合学习笔记(二)
$ git log --oneline --decorate --graph --all
创建新分支并转到该分支下
$ git checkout -b testing # = $ git branch testing + $ git checkout testing
本地分支track远程分支
$ git branch --set-upstream-to=[remote-name]/[branch-name]
Merge
将分支hotfix合并到当前分支下
$ git merge hotfix
删除hotfix分支
$ git branch -d hotfix
使用合并工具解决冲突文件
$ git mergetool
如果合并之后出现conflict:
- git status: 查看有哪些文件冲突
- 解决冲突(可以使用git mergetool)
- git add解决冲突后的文件来标记解决了冲突(使用git mergetool无需手动标记)
- git commit
Manage branches
查看有哪些分支
$ git branch
查看每个分支最后提交的内容
$ git branch -v
比git branch -v展现更多的内容,recommend
$ git branch -vv
已经与当前branch合并的分支,没有*标记的branch可以放心删除
$ git branch --merged
没有与当前branch合并的分支 为保证数据的不丢失,git branch -d无法删除,如果确认可以删除,使用git branch -D
$ git branch --no-merge
Remote branches
显示远程仓库的信息
$ git remote show [remote-name]
分享本地分支/同步本地分支(推送分支和推送内容到该分支均使用此句)
- 本地分支不会自动同步到远程仓库,如果想分享,必须显式push
- 个人感觉本地分支与远程分支保持同名较好维护,除非觉得remote branch name太难听不能忍
$ git push [remote-name] [local-branch-name]:[remote-branch-name]
#如果local-branch-name和remote-branch-name一致,直接使用下面的命令
$ git push [remote-name] [branch-name]
从远程仓库pull数据,虽然远程仓库有多个branch,但是本地没有除master以外可编辑的分支,有[remote-name]/[branch]的pointer,但自己没有此branch,需要手动创建(理解origin/master和master的区别)
创建track远程分支的本地分支(即使远程仓库)
$ git checkout -b [local-branch-name] [remote-name]/[remote-branch-name]
等同上一个,不过本地分支名称与远程分支名称一致
$ git checkout --track [remote-name]/[remote-branch-name]
等同于上一个,recommend
$ git checkout [remote-branch-name]
删除远程仓库上的分支
$ git push [remote-name] --delete [remote-branch-name]
本地分支track远程分支
$ git branch --set-upstream-to=[remote-name]/[branch-name]
Rebase
最终的结果与merge一样。线性日志,虽然是并行开发的代码,但是显示成顺序进行。
建议:一般而言,只rebase本地代码,如果你把代码push到别处去了,就别rebase了。
如果有两个分支,master和test,想把test分支rebase到master之上:
$ git checkout test
$ git rebase master
#$ git checkout test + $ git rebase master = $ git rebase master server
此处如果有冲突无法rebase,git会暂停,此时有三种选择
- 手动解决冲突,git add解决了冲突后的文件,git rebase --continue
- 忽略,git rebase --skip
- 放弃,git rebase --abort
假如没有abort
$ git checkout master
$ git merge test
如果有三个分支,master,server,client,client从server上分出,只想把client分支rebase到master,server分支还想继续更改测试
$ git rebase --onto master server client # $ git rebase --onto [branch] [since] [till]
Take the client branch, figure out the patches since it diverged from the server branch,
and replay these patches in the client branch as if it was based directly off the master branch instead.
$ git checkout master
$ git merge client
$ git rebase master server
$ git checkout master
$ git merge server
关于rebase,Pro Git 讲了很多,有很多图,绘声绘色,如果想详细了解,直接查阅Git Branching - Rebasing
至此,已能满足绝大部分日常工作,Pro Git 后续还有很多内容,但就目前而言,并不那么紧要,所以这系列学习笔记将会暂停一段时间,如果后续空闲下来,再继续(虽然我也不知道是什么时候^_^)。
对了,码云是非常好的代码托管平台,今天我也用git试了同步代码上去,效果爆炸。