53

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

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

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

有更好的吗?

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

4

3 回答 3

65
git fetch -u origin master:master

在不使用结帐的情况下合并、更新和拉取 Git 分支

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

-uor--update-head-ok确保即使您已签出给定分支,该命令仍然有效,否则会出现错误:

致命:拒绝获取非裸存储库的当前分支 refs/heads/master

于 2017-08-10T20:24:57.230 回答
5

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

但是,您仍然可以使用 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_BRANCH,gitk --all等)。

根据您的需要,这可能就足够了。origin/master特别是,您可以在master不离开当前分支的情况下查看需要应用的内容。

于 2012-03-17T06:47:41.550 回答
3

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

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

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

安全运行会将所有hub sync本地分支更新为远程版本。

于 2019-05-16T20:58:00.047 回答