簡體   English   中英

如何將更改合並到兩個分支

[英]How to merge changes to both branches

現在,我有一個develop分支,並使用git checkout -b feature-keyboard develop作為新版本git checkout -b feature-keyboard develop了一個新的分支feature-keyboard 現在,我需要對兩個分支進行更改。 我現在正在做的是: git checkout -b feature-ui-changes develop然后添加一些更改來提交它們。 然后git checkout developgit merge --no-ff feature-ui-changes 但是,如果我先執行相同的結帳feature-keyboard ,然后將更改合並到feature-ui-changes 它說沖突。 而且應該如此。 但是,在對應用程序進行一些更改之后,如何更新對developfeature-keyboard分支的更改?

您可以在一個分支上進行更改,然后將其提交。 然后切換到另一個分支並選擇您的更改:

git cherry-pick <commit-hash>

如果您發現自己需要“兩次提交”兩個分支之間的眾多更改,則表明您的過程可能存在問題。 也許代碼過早地分支了。

Git有一個不錯的工作流,可以在您開發某些東西的同時創建一個“主題”分支,同時跟上該主題上游的更改。 即,您可以使用git rebase重寫分支歷史記錄,並將更改遷移到上游的較新版本。

這為您減輕了兩次提交的麻煩,也避免了您為每個上游提交分叉兩個副本。

$ git checkout -b topic
# ... hack, commit, hack, commit, ...
$ git checkout master
# ... pull, hack, commit, pull, ...

現在, master上出現了各種各樣的新東西,它們沒有反映在topic :您所做的更改,以及可能從另一個存儲庫引入的上游更改。 您想回到topic上的工作,但可以根據新的master 這就是重新定級的意義:

$ git checkout topic
$ git rebase master

Git會找出當前分支, topicmaster之間的祖先點。 從那時起,將進行topic更改,並從當前的master挑選它們。 然后,將產生的選擇安裝為topic分支。 因此, topic分支被重寫:被該分支的全新版本替換。 (當然,一路上,您可能必須解決沖突。)

如果您有兩個或兩個以上這樣的主題,則可以獨立對待它們:在返回主題時將它們中的每個主題重新設置基礎,並與主要更改保持最新。

變基后的好處是, topic重新設置后,它包含后綴(例如master )作為后綴:它具有master所有提交,以及一些新的提交。 此時,您可以執行以下操作:

git checkout master
git reset --hard topic   # fast-forward master to the topic

現在master擁有所有topic更改:實際上, mastertopic指向同一個提交對象:它們是相同的。 我們可以安全地進行此操作,因為由於最近的重新部署, master沒有任何不在topic提交。 因此,我們沒有拋棄任何master東西:它只是向前跳。

如果master確實有一些新的提交,您還可以進行“其他方式的變基”:

# on master
git rebase topic   # same as git reset --hard topic if master has no new commits!

放回master上的新更改,然后引入topic更改,然后在頂部重新播放(選擇櫻桃)新更改。 這是重新master topic的鏡像: rebase不在乎哪個分支是主干,哪個主題。

但是,如果這些新的master提交是公開的,那么您將通過基於topic更改重新定義公共歷史來編寫公開歷史。 你可以擺脫這一點,如果所有的新master承諾不會在topic是你自己的和未發表的(你讓他們在本地並沒有git push他們-ed到另一個回購),或者你有一些其他的理由重寫master的歷史甚至如果已發布。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM