2012-06-29 56 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

相關問題