M J*_*obs 6 git rebase feature-branch
假设我有一个名为的功能分支FeatureA,它与development它所基于的(远程)不同步.通常我会通过调用git rebase development(在origin/development自然地同步我的本地开发之后)来修改我的分支.
今天,我做了不同的事情,并git pull --rebase origin development从我的功能分支调用.现在,有什么区别?
Sto*_*ica 12
git pull --rebase origin development 是这些命令的快捷方式:
git fetch origin development
git rebase origin/development
Run Code Online (Sandbox Code Playgroud)
也就是说,获取origin/development然后在其上重新绑定当前分支.
UPDATE
正如@torek指出:
是的,除了fetch 1.8.3或更早版本的fetch 1.8.3之前的两参数版本的fetch不更新.(rebase结果是相同的,但原点/开发不会移动.)
tor*_*rek 10
简短版本:如果rebase顺利,它运行正常.如果没有,它仍然可以正常工作,它可能在图形查看器中有点混乱.
一如既往,git pull基本上git fetch是......好吧,在这种情况下,git rebase而不是git merge.所以:
origindevelopment分支并将其放入FETCH_HEADgit merge <commit-ID-from-FETCH_HEAD>使用git rebase该ID所以我们说的在本地树犯图形看起来是这样的(我们假设你跑了git fetch,在一些点更新origin/development他们的提交E和F):
C - D <-- FeatureA
/
A - B <-- development
\
E - F <-- origin/development
Run Code Online (Sandbox Code Playgroud)
而且,让我们进一步假设,origin现在还有一个提交在他们的分支上命名development.本fetch-从原产地一步将它捡起来,做FETCH_HEAD点到,所以让我们在绘制为节点G:
C - D <-- FeatureA
/
A - B <-- development
\
E - F <-- origin/development
\
G <-- FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
(如果你的git足够新,1.8.4或更高版本,此时origin/development也会更新,指向节点G.如果没有,你的本地副本development,存储在你的中origin/development,落后.这对真的不重要rebase,它只会改变你在git log --graph视图或图形提交树查看器中看到结果的方式.)
现在,rebase将FeatureA使用通常的方法复制您的提交以进行rebase,并FeatureA指向副本,放弃原始提交.我们会打电话给那些重订C'和D':
C - D [abandoned]
/
A - B <-- development
\
E - F <-- origin/development
\
G <-- FETCH_HEAD
\
C' - D' <-- FeatureA
Run Code Online (Sandbox Code Playgroud)
如果你git fetch在这一点上运行一个平原,或者你有更新的git以便origin/development移动; 如果我们删除"废弃"部件并简化绘图,它将变为:
A - B <-- development
\
E - F - G <-- origin/development
\
C' - D' <-- FeatureA
Run Code Online (Sandbox Code Playgroud)
如果快进合并你的本地分支标签development以进行匹配origin/development,则绘制起来更简单(将扭结从B向下放到E并将箭头指向的两个development和origin/development右边G).
| 归档时间: |
|
| 查看次数: |
5286 次 |
| 最近记录: |