我想如果我沒有進行任何本地提交,兩者的提交歷史會是相同的嗎?
uj5u.com熱心網友回復:
答案是肯定的和否定的。
假設您已經為 Git 克隆了一份 Git 存盤庫的副本(例如,https ://github.com/git/git.git )。你自己master或main(它們都存在并且現在總是在 GitHub 上識別相同的提交,或者無論如何都應該這樣做)并且沒有進行新的提交,但是 Junio 已經添加了一些現在在 GitHub 上的提交,所以你運行:
git fetch origin
接著:
git merge
或者:
git rebase
合并或重新設定基礎,origin/main或origin/master取決于您更喜歡這兩者中的哪一個。(也就是說,你的 M 的上游是你的 origin/M,無論 M 是 master 還是 main。)
默認情況下,
git merge將與上游進行快進操作。這會使您的分支與遠程跟蹤名稱相匹配。在所有情況下,
git rebase將檢查上游的提示提交,然后“重播”(cherry-pick)您所做的提交,這些提交根本不是提交,然后將您的分支名稱重置為指向此處。這會使您的分支與遠程跟蹤名稱相匹配。
所以在這里,答案是肯定的。
但請注意上面默認情況下的短語。假設你跑了:
git config merge.ff false
或者:
git config --global merge.ff false
在過去的某個時候。那么您的git merge命令將不會使用默認的快進;相反,它將創建一個新的合并提交。所以現在這兩個命令給出了不同的結果。
(你做了——正確——注意這git merge --squash也不會快進,因此可能會做一些你不想要的事情。)
如果您配置merge.ff為only,則plaingit merge將等同于git merge --ff-only,即,將嘗試快進操作,但如果這不可能,將徹底失敗。在這種模式下,對于這種情況,兩者都git merge做git rebase同樣的事情,但是git rebase當你有自己的提交時會做一些事情(vs git merge --ff-only,它會失敗)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/521446.html
