git从master转到开发分支

Mat*_*ley 439 git branch pull

我有一个名为dmgr2(开发)的分支,我想从主分支(实时站点)中取出并将所有更改合并到我的开发分支中.有一个更好的方法吗?提交更改后,这是我计划做的事情:

git checkout dmgr2
git pull origin master
Run Code Online (Sandbox Code Playgroud)

这应该将实时更改拉入我的开发分支,还是我有这个错误?

tor*_*rek 638

您列出的步骤将起作用,但有更长的方法可以为您提供更多选项:

git checkout dmgr2      # gets you "on branch dmgr2"
git fetch origin        # gets you up to date with origin
git merge origin/master
Run Code Online (Sandbox Code Playgroud)

fetch命令可以在之前的任何时候完成merge,即你可以交换获取和结账的顺序,因为fetch只需转到指定的remote(origin)并对它说:"给我所有的东西,我不要",即所有分支机构的所有提交.它们被复制到您的存储库,但以远程控制的origin/branch任何分支命名branch.

此时,您可以使用任何查看器(git log,gitk等)来查看您没有的"他们拥有的",反之亦然.有时这只对温暖的模糊情感有用("啊,是的,这实际上是我想要的"),有时它对完全改变策略很有用("哇,我还不想要那些东西").

最后,该merge命令采用给定的提交,您可以将其命名为origin/master,并执行将该提交及其祖先引入的任何内容,以及运行时所处的任何分支merge.您可以插入--no-ff--ff-only阻止快进,或仅在结果是快进的情况下合并,如果您愿意.

使用序列时:

git checkout dmgr2
git pull origin master
Run Code Online (Sandbox Code Playgroud)

pull命令指示git的运行git fetch,然后道德等同git merge origin/master.所以这几乎与手工完成这两个步骤相同,但有一些微妙的差异可能对你不太关心.(特别是通过fetch运行的步骤运行,并且它不会更新您的仓库中的ref:1任何新的提交最多只能通过特殊引用引用.)pull origin/masterFETCH_HEAD

如果您使用更明确git fetch origin(然后可选择环顾四周)然后git merge origin/master顺序,您还可以master使用远程进行自己的本地更新,只需fetch在网络上运行一次:

git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master
Run Code Online (Sandbox Code Playgroud)

例如.


1这第二部分已被更改 - 我说"固定"-in git 1.8.4,现在机会性地更新"远程分支"引用.(正如发行说明所说,这是一个故意的设计决定,跳过更新,但事实证明,更多的人更喜欢git更新它.如果你想要旧的远程分支SHA-1,它默认保存在因此可以从reflog中恢复.这也启用了一个新的git 1.9/2.0功能来查找上游的rebase.)

  • 我只是要求一个,呃,朋友 - 你怎么去撤消你在这里的第一个代码块(checkout/fetch/merge)? (26认同)
  • @RichBradshaw:`git checkout`通常是非破坏性的,通常没有理由撤消`git fetch`,所以听起来你问的是如何退出合并提交.答案与其他提交相同:`git reset`或`git revert`.对于*未发布的*更改`git reset`通常是最好的方法; 对于其他人已有的变化,`git revert`可能会更好,但请参阅Linus Torvald关于恢复合并的建议:https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-故障-merge.txt (9认同)
  • @WeDoTDD:我不明白这个问题。有许多命令可用于查看提交图(gitk,带有或不带有--oneline的git log --graph等),您可以使用git show或git show -m。合并提交,或使用`git diff`。在所有这些情况下,都是在命令行上输入命令时指定程序。 (2认同)

Dr-*_*ket 28

如果您在 feature-1分支上并且想要拉取 master ——(也许是为了获取最新的合并更新/减少合并冲突的机会),请执行以下操作:

git pull
git merge origin/master
Run Code Online (Sandbox Code Playgroud)

master拉入您的分支 - 不影响 master!

这会将自从你们两个分道扬镳后进入 master 的所有内容拉到您的分支中。

如果您的分支已经公开,那么这样做就可以了,因为它不会重写历史。


小智 18

这对我有用。用于从 master 获取最新代码到我的分支

git rebase origin/master

  • 不要忘记先“git fetch origin”。 (12认同)

GM1*_*GM1 14

我有主更新和分支更新,我希望我的分支通过变基来跟踪主分支,以正确跟踪所有历史记录。让我们将我的分支称为 Mybranch:

git checkout master
git pull --rebase
git checkout Mybranch
git rebase master
git push -f origin Mybranch
Run Code Online (Sandbox Code Playgroud)

我需要根据情况和git提示解决所有与git mergetoolgit rebase --continuegit rebase --skip和的冲突,直到一切都解决。git add -u

注意:对最后阶段的更正,由 Tzachi Cohen 提供,使用“ -f”强制 git 在服务器上“更新历史记录”。

现在,分支应该与 master 对齐并重新建立基础,也应与远程更新一致,因此git log没有“后面”或“前面”,我只需要删除所有本地冲突的 *.orig 文件以保持文件夹“干净” ”。

  • 这个答案要简单得多并且完成了工作。master 有 3 个分支缺少 master 中所做的更改。严格按照这些步骤操作,结果成功了。谢谢 (2认同)

gre*_*ood 9

情况:在我当地的分支机构工作,但我喜欢在名为的开发分支中保持更新dev.

解决方案:通常,我更喜欢这样做:

git fetch
git rebase origin/dev
Run Code Online (Sandbox Code Playgroud)

  • 通常的免责声明只有在本地分支只是本地分支时才应该进行rebase,也就是说,在重写历史记录时没有被推到任何地方. (11认同)
  • 我不知道当我写这篇评论时我在想什么,因为答案中清楚地表明他正在一家本地分支机构工作。当您对分支进行变基时,您会更改所有提交的哈希值。有权访问或克隆您的分支的其他人将无法知道您刚刚做了什么,并且将使用您的旧分支。我可能没有资格回答你的问题,你可以[在这里](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History)了解有关重写历史的更多信息。 (3认同)
  • @vitaliis 通常开发团队或大型开发公司不允许您重写远程分支上的任何历史记录。例如,在我工作的地方,我可以重写自己的远程分支,即我创建并推送为新的分支。但是,如果我尝试检查我同事的远程分支(不是开发或主/主),我可能无法访问push --force(rebase - 重写历史)这只是公司/团队政策或法规(金融机构)的问题 (3认同)

小智 9

如果开发人员是干净的并且只想更新主要更改

  • git checkout dev
  • git pull origin <main or master>
  • git push origin dev


小智 5

如果您的历史记录不匹配并且无论如何都想合并它,您可能需要使用它:

\n
git pull origin master --allow-unrelated-histories\n
Run Code Online (Sandbox Code Playgroud)\n

有关详细信息,请参阅“ \xe2\x80\x9cfatal:拒绝合并不相关的历史记录\xe2\x80\x9d Git 错误”。

\n