[英]git rebase pulls in changes from unrelated branch?
我是一個新手,所以不要笑得太厲害......
我在分支A上做了一些工作並做了一些提交。 然后,不得不進行修補程序更改,所以我創建了分支B並更改了一些文件。 然后,因為主人沒有改變我認為如果我這樣做會更簡單和更清楚:
git rebase master
git checkout master
git merge B
但是,這應用了分支A的變化。我不理解什么? 這不可能是它應該工作的方式,是嗎?
當您創建分支B
,您在分支A
,因此分支B
的基礎包含您在分支A
中執行的所有工作。 這就是為什么那些分支A
變化現在是master
。 從圖形上看,您有以下情況:
branchA: A -- B -- C
branchB: A -- B -- C -- D
在master
制作修補程序的正確策略是從master
創建一個分支:
# assuming you start on branch B
git checkout master
git checkout -b master_hotfix
# make the fix
git commit -m 'made the hotfix'
git checkout master
git merge master_hotfix
# carry on as you were
git checkout branchB
要撤消已完成的操作,可以嘗試在發生錯誤合並之前將master
分支重置為提交。 輸入git log
並計算與branchB
合並后提交的提交branchB
。 然后輸入:
git reset --hard HEAD~N
其中N
是您希望從master
刪除的提交數。 然后應用我上面給出的步驟正確地創建此修補程序。 請注意,如果您已將本地master
服務器推送到遠程服務器,則不應使用git reset
。 在這種情況下,您可以嘗試使用git revert
,但是將master
保持branchB
可能是有意義的,並且只有在您完成工作后再次合並branchB
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.