2012-06-29 30 views
3

我注意到,如果我做了如果没有任何变化,rebase -i会做什么?

git rebase -i HEAD~10

,然后不改变结果文件中任何东西,某种底垫仍然得到执行。即我需要

git push origin branch --force

因为经常推

git push origin branch

显然会失去的历史!

这似乎暗示着一些历史被改变了,但我不明白为什么。如果我没有选择改变任何提交(即每个提交都被选中),那么为什么历史会发生变化,具体发生了什么变化?

+0

我应该提到,为了达到SO的质量标准,我必须大幅延长这个问题。我认为它的长度可以达到1/3。 – hackerhasid

+0

我无法复制它。我做了三次提交的测试回购。创建一个本地远程,推动我的分支,然后尝试'git rebase -i HEAD〜2',并成功推送到远程。当我尝试修改之前的提交时,它确实给了我一个修改历史记录的错误。 – jacobangel

回答

3

如果你做一个git log --format=fuller你会看到一个承诺不仅跟踪作者,但提交者:

commit 0d987988ffed315ef63f79b33eae40a8715390c9 
Author:  Statichippo <[email protected]> 
AuthorDate: Fri Jun 22 14:09:48 2012 -0400 
Commit:  Statichippo <[email protected]> 
CommitDate: Fri Jun 22 14:09:48 2012 -0400 

    a commit message 

当你变基,用户被列为新的提交者。下面是它会是什么样子,如果我重建基础的代码块的例子:

commit 3e23bea3c778c66h59c5f665061e9354507b379b 
Author:  Statichippo <[email protected]> 
AuthorDate: Fri Jun 22 14:09:48 2012 -0400 
Commit:  Jacob Angel <[email protected]> 
CommitDate: Tue Jul 3 12:39:43 2012 -0400 

    a commit message 

那么是什么可能发生的事情是,你重订他人所做的提交,它改变了承诺和CommitDate。很明显,git会看到一个新的散列(因为部分提交发生了变化)并记录下这个更改。

+0

这样做很有意义,谢谢! – hackerhasid

相关问题