我git rebase最近开始使用,并不是100%肯定我做得对.为了这个问题,原点有两个分支,master并且next分支来自master.
自上次两者同步以来,master有2次提交和next6次:
$ git log --oneline origin/next..origin/master
59b5552 master commit #2
485a811 master commit #1
$ git log --oneline origin/master..origin/next
4ebf401 next commit #6
e9b6586 next commit #5
197ada0 next commit #4
4a2c3c6 next commit #3
040a055 next commit #2
84537bf next commit #1
Run Code Online (Sandbox Code Playgroud)
当我结账next并执行时git rebase -i origin/master,我得到以下内容:
$ git status
# On branch next
# Your branch and 'origin/next' have diverged,
# and have 8 and 6 different commits each, respectively.
Run Code Online (Sandbox Code Playgroud)
最后做后git pull --rebase,从两次提交master是next:
$ git log --oneline origin/next..next
8741d09 master commit #2
485a811 master commit #1
Run Code Online (Sandbox Code Playgroud)
问题:
8 and 6之前会有不同的提交pull --rebase?非常感谢 :)
Mik*_*itz 56
让我们从头开始.这是您原始状态的图表:
A-B-C (master, origin/master) \ D-E-F-G-H-I (next, origin/next)
当你签出next和重建基础next上origin/master,这两个上已有之后创建的6次新的提交origin/master.这些新的提交有"master commit#2"(C在我的图中)作为他们的祖先,而不是他们的原始祖先在哪里origin/master和origin/next分歧(A在我的图中),所以他们的哈希将是不同的.我相信这就是为什么你会看到next有8个不同的提交origin/next:2个origin/master和6个"重新提交"的提交origin/next.
之后git checkout next ; git rebase -i origin/master,你应该有这个:
A-B-C (master, origin/master)
\ \
\ D'-E'-F'-G'-H'-I' (next)
\
D-E-F-G-H-I (origin/next)
您可以看到next有8个未提交的提交origin/next,并且origin/next确实有6个未启用的提交next.当然这只是根据提交的SHA-1哈希值.如果你git diff origin/next next- diff应该只显示来自B和的变化C(如图中标记的那样),实际内容应该非常接近.
当你git pull --rebase继续打开时next,它从源(远程origin/next)获取更改并将当前分支(next)重新绑定到该远程.这导致了在变化next,但不是在origin/next后出现origin/next的新的next分支.它应该如下所示:
A-B-C (master, origin/master)
\
D-E-F-G-H-I (origin/next)
\
B'-C' (next)
如果这是您想要的历史图表,那么您已经成功了.
但是,我怀疑你真的希望看起来像中间图,特别是如果你next是一个功能分支,你正在处理项目的下一个部分,并且master是为了稳定代码和小错误修复.如果是这样,那么你应该做的git push不是git pull --rebase让遥控器反映你的历史版本而不是反过来.
| 归档时间: |
|
| 查看次数: |
31432 次 |
| 最近记录: |