git pull & rebase

129 阅读3分钟

Case

一个开发流程示例

  1. Tom 从master分支checkout出新的分支,开始自己的开发
  2. Tom 开发的过程中,master分支merge了 Jack 的开发分支
  3. Tom 开发完成准备提交,提交之前先从master分支同步最新的代码

master分支此时的历史

* 7708b20 2018-07-15 | Merged jack_dev into master [sting]
|\
| * 88d93d7 2018-07-15 | Jack test [sting]
|/
* 1991812 2018-07-14 | Init [sting]

tom_dev此时分支的历史

* c8a6b9a 2018-07-15 | Tom test [sting]
* 1991812 2018-07-14 | Init [sting]

同步 master 代码,对比提交线图


如果执行git pull origin mastertom_dev分支的历史大致如下:

* 3ec7859 2018-07-15 | Merge branch 'master' into tom_dev [sting]
|\
| *   7708b20 2018-07-15 | Merged jack_dev into master [sting]
| |\
| | * 88d93d7 2018-07-15 | Jack test [sting]
| |/
* | c8a6b9a 2018-07-15 | Tom test [sting]
|/
* 1991812 2018-07-14 | Init [sting]

如果执行git pull --rebase origin master,则分支的历史大致如下:

* 70b2f41 2018-07-15 | Tom test [sting]
*   7708b20 2018-07-15 | Merged jack_dev into master [sting]
|\
| * 88d93d7 2018-07-15 | Jack test [sting]
|/
* 1991812 2018-07-14 | Init [sting]

最终的 master 分支


  • 不使用rebase
* 4f77792 2018-07-15 | Merged tom_dev into master [sting]
|\
| *   3ec7859 2018-07-15 | Merge branch 'master' into tom_dev [sting]
| |\
| |/
|/|
* |   7708b20 2018-07-15 | Merged jack_dev into master [sting]
|\ \
| * | 88d93d7 2018-07-15 | Jack test [sting]
|/ /
| * c8a6b9a 2018-07-15 | Tom test [sting]
|/
* 1991812 2018-07-14 | Init [sting]
  • 使用rebase
* 34b5909 2018-07-15  | Merge branch 'master' into tom_dev [sting]
|\
| * 70b2f41 2018-07-15 | Tom test [sting]
|/
*   7708b20 2018-07-15 | Merged jack_dev into master [sting]
|\
| * 88d93d7 2018-07-15 | Jack test [sting]
|/
* 1991812 2018-07-14 | Init [sting]

备注:Git hist

首先参考下面的代码配置.git/目录下的config,就可以使用git hist命令了。

[alias]
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

相对于git loggit hist可以查看更加直观的提交历史。

$ git hist
* 398acf4 2018-07-14 | Merged bug_fix into master [sting]
|\
| * 9acec19 2018-07-14 | Bug fix [sting]
|/
*   07d350a 2018-07-14 | Merged jack_dev into master [sting]
|\
| * 414d898 2018-07-14 | Feature B [sting]
|/
*   46bb77f 2018-07-14 | Merged tom_dev into master [sting]
|\
| * 72cd8b8 2018-07-14 | Feature A [sting]
|/
* 1003296 2018-07-14 | Init [sting]

小结

本文通过一个简单的 case,介绍了pull --rebase的作用。 可以看到通过使用rebase,可以让提交记录更加清晰。

参考

  1. githowto.com/aliases