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-pull
的EXAMPLES
部分:
• 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/master
、origin/whatever
)并下载所有相关对象。这不会执行合并——这意味着现在您可以选择要合并的内容。
这是一本好书,有一些很好的图表说明了这一点:git-scm.com/book/en/v2/Git-Branching-Remote-Branches以上是关于git pull 在不同的分支上的主要内容,如果未能解决你的问题,请参考以下文章
好代码是管出来的——Git的分支工作流与Pull Request