繁体   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