[英]How does `git pull --rebase` correctly pull amended commits?
我有一個設置,可以在local
計算機上進行編碼,然后將其從dev
框中提取出來進行測試。 說我創建一個提交A
上分支foo
上local
,並創建一個分支foo
上開發框已上游設置為local/foo
。 如果我從dev框上的branch foo
進行git pull
,則dev/foo
分支樹與local/foo
相同。
但是,如果現在我修改local/foo
的提交A
,則從dev框上的分支foo
進行git pull
會產生合並沖突。 而git pull --rebase
可以正常工作,不會在dev/foo
上兩次重復提交A
git help pull
說:
-r, --rebase[=false|true|merges|preserve|interactive]
When true, rebase the current branch on top of the upstream branch after
fetching. If there is a remote-tracking branch corresponding to the upstream branch
and the upstream branch was rebased since last fetched, the rebase uses that
information to avoid rebasing non-local changes.
我知道在上述情況下應用了最后一行,但是我不了解先決條件是什么或它是如何工作的?
一個解釋將非常有幫助。 謝謝
這是由於合並和重新定基的差異。
“常規” git pull
首先獲取更改,然后將其合並到本地狀態,而git pull --rebase
獲取更改,然后將本地狀態重新建立在遠程目錄的頂部。
合並僅考慮項目的兩個狀態-合並的“我們”和“更”一方,並在可能的情況下考慮它們的所謂“合並基礎”-這些開發線共享的最后一個共同提交。
相反,基於基准,首先將“我們的”一側重置為指向“他們的”一側最前端的提交,然后再應用每個“我們的”提交“其”沒有單獨提交的提交(作為文本補丁,接一個。
由於將本地更改增量重新應用於遠程更新狀態,因此這可能會產生更大的機會而不產生沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.