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

Ant*_*ony 29 git

我目前正在featurex分公司工作.我们的主分公司名为分公司our-team.自从我开始研究以来featurex,对分支机构进行了更多的更改our-team.在我推动featurex合并之前,我本地希望从our-team分支中获取所有更改,featurex以便我可以确保一切按预期工作.

我已在本地完成此操作以获取所有最新更改our-team.

git checkout our-team
git pull
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Jad*_*ine 48

第1步:转到主分支 our-team

  • git checkout我们的团队

第2步:从our-team分支中提取所有新更改

  • git pull

第3步:去你的分行 featurex

  • git checkout featurex

第4步:将our-team分支的更改合并到featurex分支

  • our-team如果要合并特定提交,请使用git mergegit cherry-pick{commit-hash}

第5步:使用our-team分支的更改来推送您的更改

  • git push

注意:在推送之前将分支合并our-teamfeaturex分支之后,可能必须修复冲突

  • 我对 Git 比较陌生,并且遇到了一个问题,即“git merge our-team”没有包含远程“our-team”的最新更改,即使在运行“git fetch”之后也是如此。我必须首先签出“our-team”,执行“git pull”,然后在合并之前签出“featurex”。Git 的思维方式和我不一样。 (7认同)

Jul*_*lCh 17

您可以git rebase our-team在分支机构时使用featurex

doc:https://git-scm.com/docs/git-rebase

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

  • 不要在公共分支上使用 rebase。这是有史以来最糟糕的建议。 (8认同)
  • 我想强调的是:如果你这样做而你*没有*从本地的'我们团队'那里做出改变,你就需要运行`git fetch && git rebase origin/our-team`.您的命令假定存储库先前已更新. (5认同)
  • 我将来会使用它,但是,这一次我只是做了以下事情......它有同样的影响吗?`git checkout our-team git pull git checkout featurex git merge our-team` (3认同)
  • @OndrejSotolar 为什么? (3认同)

Cyb*_*xar 14

对于在谷歌上看到这篇文章的其他人。有 2 个选项,合并重新设置分支。两者的工作方式不同,但结果相似。

接受的答案是一个重订。这将获取对 完成的所有提交our-team ,然后将完成的提交应用到featurex,提示您根据需要合并它们。

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

什么其他的海报所提出的建议是一个合并。这将采用featurex分支,无论它具有什么状态,并尝试将其与 的当前状态合并our-team,提示您在推送到 之前执行一个,大的,合并提交并修复所有合并错误our-team。所不同的是,你所申请的featurex提交之前our-team新的提交,然后固定的差异。你也不会重写历史,而是向它添加一个提交,而不是重写之前的那些。

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

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

  • 谢谢你。我真正不喜欢 git 的是,一个问题似乎总是有几个答案,即使是专家也不同意,而我,作为一个被迫使用它的菜鸟用户,必须以某种方式选择正确的答案。如果我选错了,那么 git 就会惩罚我,因为没有简单的撤消选项。好吧,可能有很多撤消选项,但然后我们重新开始:-( (11认同)
  • 缓解这种情况可以采取的一件事是创建“备份分支”。在进行重大更改之前,您始终可以执行“git checkout -b my-backup”,这不是完整/正确的备份,但如果合并/变基出现问题,它会为您省去一些麻烦。只要你不推动它并随后清理它,这样做就没有真正的缺点。 (3认同)

小智 12

git fetch origin our-team
Run Code Online (Sandbox Code Playgroud)

要么

git pull origin our-team
Run Code Online (Sandbox Code Playgroud)

但首先你要确保你已经在你想要更新的分支上(featurex).


小智 9

你快到了:)

剩下的就是

git checkout featurex
git merge our-team
Run Code Online (Sandbox Code Playgroud)

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

以上假设您已经在 featurex 中提交/隐藏了您的更改,如果不是这种情况,您需要先执行此操作。