git学习笔记(四)

上篇博客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:

  1. git status: 查看有哪些文件冲突
  2. 解决冲突(可以使用git mergetool)
  3. git add解决冲突后的文件来标记解决了冲突(使用git mergetool无需手动标记)
  4. 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]

分享本地分支/同步本地分支(推送分支和推送内容到该分支均使用此句)

  1. 本地分支不会自动同步到远程仓库,如果想分享,必须显式push
  2. 个人感觉本地分支与远程分支保持同名较好维护,除非觉得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会暂停,此时有三种选择

  1. 手动解决冲突,git add解决了冲突后的文件,git rebase --continue
  2. 忽略,git rebase --skip
  3. 放弃,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试了同步代码上去,效果爆炸。

转载于:https://my.oschina.net/u/3149614/blog/899328

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值