git pull 在不同的分支上

Posted

技术标签:

【中文标题】git pull 在不同的分支上【英文标题】:git pull on a different branch 【发布时间】:2022-01-22 09:15:49 【问题描述】:

如果我正在处理一个分支,然后意识到我需要将另一个分支合并到我的分支中,这是我当前的工作流程(对于这个例子,假设我正在处理我的分支并希望合并到 master):

git stash
git checkout master
git pull
git checkout my-branch
git merge master
git stash pop

除了当前签出的分支之外,git 中有没有办法拉出一个分支,或者有更好的方法吗?

例如,这就是我想要做的事情(再次假设我在我的分支上并想合并到master):

git pull master
git merge master

git-pull 手册页说 git pull 只是一个 get fetch 然后是一个 git merge,所以有没有办法在当前签出的分支之外的分支上执行 git pull 的合并部分?

或者是我要求的只是不可能的?

【问题讨论】:

你可以在 my-branch 做一个 get pull master,工作之后你可以去 master 分支 git merge my-branch 我不喜欢git pull,因为它可以在你背后引入合并提交,我希望让我的所有跟踪分支都保持最新。为此,我wrote an addon 将获取并快进任何跟踪分支。我和其他人已经使用它很长一段时间了,这绝对是一个节省时间的方法。好的部分是,如果它不是快进合并,它会让你解决它并让它变得更好。这对我们很有效,因为我们经常使用变基工作流程。 啊,我明白了……您实际上也想让您的分支与 master 保持同步。我的工具不会那样做。 @jszakmeister 如果我想将来自master 的最新更新合并到my-branch,我不需要吗? 这能回答你的问题吗? Merge, update, and pull Git branches without using checkouts 【参考方案1】:

我发现了一个对我有用的咒语:

git fetch origin master:master

那么(如果你想立即合并):

git merge master

我真的很惊讶找到答案是多么困难,因为这似乎是一个常见的用例。

【讨论】:

如果您希望将分支拉到不同的本地分支名称下,此语法实际上很有用。 这应该是公认的答案,因为它准确地回答了问题。接受的答案没有提供正确的命令,并且根据问题做了一些你不期望的事情。 get fetch origin branch:branch 是否与从branch 调用的git pull 完全相同? 我尝试用这种方式获取,但由于非快进而被拒绝。【参考方案2】:

试试这个:

git pull yourRepositoryName master

【讨论】:

我试过这个,但我想我没有意识到你必须为 yourRepositoryName 放什么。它实际上不是存储库的名称,而是您用来签出存储库的 url。例如:git pull git@github.com:foo/bar.git master 啊,所以如果你有默认的origin 别名,你会运行git pull origin master 没错。您可以使用 `git remote add yourAlias github.com/yourGitHubRepo´ 自己指定别名 对于遇到此问题的任何其他人,git remote -v 将显示任何别名及其 URL。这里是关于别名的更多信息:gitref.org/remotes 这没有回答问题。此命令会将给定的分支合并到您的当前分支中。对于正确的命令,请查找 Chris 的答案。它也有最多的选票。【参考方案3】:

我们可以使用git pull 命令从同一存储库中的另一个分支获取更改,如下所示:

$ git pull origin <target-branch>

参见man git-pullEXAMPLES 部分:

   •   Merge into the current branch the remote branch next:

           $ git pull origin next

【讨论】:

你应该解释你的答案或至少添加一些参考,这样别人才能完全理解你的答案。【参考方案4】:

你也可以试试这个:

git fetch
git merge origin/master

这不会更新您的本地 master 指针,但会将最新的 origin/master 合并到您当前的本地分支中。

【讨论】:

如果我的本地master 指针没有更新,那么从master 合并到my-branch 是否找不到任何要合并的更改? (假设我在运行 git fetch 之前已经将 master 合并到 my-branch 中,并且 fetch 在 master 中发现了变化) 假设您在 master 分支上。 git pull 实际上只是 git fetch 然后 git merge origin/master 的快捷方式。获取部分更新所有远程跟踪指针(origin/masterorigin/whatever)并下载所有相关对象。这不会执行合并——这意味着现在您可以选择要合并的内容。 这是一本好书,有一些很好的图表说明了这一点:git-scm.com/book/en/v2/Git-Branching-Remote-Branches

以上是关于git pull 在不同的分支上的主要内容,如果未能解决你的问题,请参考以下文章

好代码是管出来的——Git的分支工作流与Pull Request

git pull后为啥分支没有更新

git push/pull 对应分支

git操作之pull拉取远程指定分支以及push推送到远程指定分支

git追踪分支

Git rebase local vs git pull --rebase origin