我注意到,如果我做了如果沒有任何變化,rebase -i會做什麼?
git rebase -i HEAD~10
,然後不改變結果文件中任何東西,某種底墊仍然得到執行。即我需要
git push origin branch --force
因爲經常推
git push origin branch
顯然會失去的歷史!
這似乎暗示着一些歷史被改變了,但我不明白爲什麼。如果我沒有選擇改變任何提交(即每個提交都被選中),那麼爲什麼歷史會發生變化,具體發生了什麼變化?
我注意到,如果我做了如果沒有任何變化,rebase -i會做什麼?
git rebase -i HEAD~10
,然後不改變結果文件中任何東西,某種底墊仍然得到執行。即我需要
git push origin branch --force
因爲經常推
git push origin branch
顯然會失去的歷史!
這似乎暗示着一些歷史被改變了,但我不明白爲什麼。如果我沒有選擇改變任何提交(即每個提交都被選中),那麼爲什麼歷史會發生變化,具體發生了什麼變化?
如果你做一個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會看到一個新的散列(因爲部分提交發生了變化)並記錄下這個更改。
這樣做很有意義,謝謝! – hackerhasid
我應該提到,爲了達到SO的質量標準,我必須大幅延長這個問題。我認爲它的長度可以達到1/3。 – hackerhasid
我無法複製它。我做了三次提交的測試回購。創建一個本地遠程,推動我的分支,然後嘗試'git rebase -i HEAD〜2',併成功推送到遠程。當我嘗試修改之前的提交時,它確實給了我一個修改歷史記錄的錯誤。 – jacobangel