【问题标题】:How to pull into not-the-current-branch?如何拉入非当前分支?
【发布时间】:2012-04-02 14:42:50
【问题描述】:

假设我当前的分支是 myfeature。我想让主人了解最新情况。据我所知,git mergegit pull 总是合并到当前分支中。

有没有办法将远程分支(例如,origin/master)的更改合并到我当前不在的分支(master)中?我能想到一种方法:

git stash
git checkout master
git pull origin/master
git checkout myfeature
git stash apply

还有更好的吗?

(可能我的整个问题都是错误的:如果启用了远程跟踪,git fetch 会自动更新主服务器以匹配源/主服务器吗?)

【问题讨论】:

标签: git git-pull git-checkout git-stash


【解决方案1】:

你是正确的,拉/合并只合并到当前分支。

但是,您仍然可以使用 fetch。例如(以下名称已更改以保护无辜,但哈希是真实的):

$ git branch | grep '^*'
* SOMEBRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
$ git fetch
7b9b8e5..1efca56  OTHER_BRANCH -> origin/OTHER_BRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
1efca56c08b7a0f511a3951195656a798c56aa62

在这种情况下,fetch 更新了一堆 origin/ 分支。本地分支都没有更新(git rev-parse 的输出保持不变)但新的提交现在在 repo 中并且可以查看(git log origin/OTHER_BRANCHgitk --all 等)。

根据您的需要,这可能就足够了。特别是,您无需离开当前分支即可查看需要从 origin/master 应用到 master 的内容。

【讨论】:

  • 好的,我明白你在说什么 - 我可以开始使用“git branch --merged origin/master”之类的命令,而不是“git branch --merged master”。但除此之外,这只是 git 的一个小烦人的限制。
  • 您还可以自动化整个“存储、签出其他分支、拉取、返回上一个分支、存储应用”序列。要查找您现在所在的分支:$ if name=$(git symbolic-ref -q HEAD); then ...,然后检查 $name 的格式为 refs/heads/*(并剥离 refs/heads/ 部分)。另见stackoverflow.com/questions/9752619/get-pretty-git-rev-name。但请注意失败的合并!
【解决方案2】:
git fetch -u origin master:master

Merge, update, and pull Git branches without using checkouts

git fetch -u <remote> <remoteBranch>:<localBranch>

-u--update-head-ok 确保命令仍然有效 even if you have the given branch checked out

【讨论】:

  • 非常好! - 在将我的东西重新定位到当前主目录之前,省去了“切换到主,拉,切换到分支”的麻烦......
【解决方案3】:

我已经开始使用 github 的 hub sync 助手来自动化这个过程,而不是依赖于获取在你正在处理的各种 repos 之间变化的单个分支:

hub 是命令行 git 的扩展,可帮助您在不离开终端的情况下完成日常 GitHub 任务。 https://hub.github.com/

$ hub sync
  • 如果本地分支过时,快进;
  • 如果本地分支包含未推送的工作,请发出警告;
  • 如果分支似乎已合并并且其上游分支已被删除,请将其删除。

运行 hub sync 安全地将您的本地分支的所有更新到远程版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2015-05-26
    • 2022-06-22
    • 2011-08-28
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多