如何从另一个分支获得更改

我目前正在featurex分支工作。我们的主分支被命名为our-team。自从我开始在featurex上工作以来,分支our-team发生了更多的变化。

我在本地这样做是为了从our-team中获得所有最新的更改:

git checkout our-team
git pull

在我推featurex进行合并之前,我想在本地将所有来自our-team分支的更改都放到featurex中,这样我就可以确保一切都按预期工作。

我该怎么做呢?

310023 次浏览

例如,当你在分支featurex上时,你可以使用变基git rebase our-team

它将在our-team分支的末尾移动分支的起点,合并featurex分支中的所有更改。

git fetch origin our-team

git pull origin our-team

但是首先你应该确保你已经在你想要更新到的分支(featurex)上。

你快成功了:)

剩下的就是

git checkout featurex
git merge our-team

这将把我们的团队合并到featurex中。

以上假设您已经在featurex中提交/存储了您的更改,如果情况并非如此,您将需要首先这样做。

在遵循这些说明之前,请记住featurex是合并和推送更改的分支

  1. 到你的分支featurex

    git checkout featurex
    
  2. our-team分支的变化合并到featurex分支

    git merge our-team
    

    git cherry-pick {commit-hash}
    

    如果您想合并特定的提交。

注意:在push前将our-team分支合并到featurex分支后,可能必须修复冲突。

有两个选项,合并变基你的分支。两者工作方式不同,但结果相似。

接受的答案是一个rebase。这将把所有提交到our-team 然后的操作应用到featurex的操作,提示你根据需要合并它们。

重基的一个小警告是你会丢失/重写你的分支历史,本质上告诉git你的分支不是在commit 123abc开始的,而是在commit 456cde开始的。这个会给在分支上工作的其他人带来问题,并且一些远程工具会抱怨它。如果你确定你在做什么,这就是--force标志的作用。

其他的海报所建议的是merge。这将使用featurex分支,无论它有什么状态,并尝试将其与our-team的当前状态合并,提示您执行一个大的合并提交,并在推入our-team之前修复所有合并错误。不同之处在于,你正在应用你的featurex提交之前our-team新提交,然后修复差异。您也不重写历史,而是向其添加一个提交,而不是重写之前的提交。

这两个选项都是有效的,并且可以协同工作。通常(我的意思是,如果你使用广泛的工具和方法,如git-flow)为一个特性分支所做的是将它合并到主分支中,通常通过一个合并请求,并解决在一次(或多次)合并提交中出现的所有冲突。

重基是一个有趣的选择,它可以帮助您在最终进行合并之前修复分支,并减轻必须进行一次大型合并提交的痛苦。

如果有人无意中发现这一点,询问自己如何在不使用git pull的情况下拉入更改- git pull将首先运行git fetch,然后git merge,因为它构成了两个序列的组合,即fetch + merge。对于那些只需要从另一个分支中拉更改而不需要这样做的人:

git checkout <branch with changes wanted>
git checkout -b <new branch>