当您在git pull
分支上运行master
时,它通常来自origin/master
。我在一个名为newbranch
的不同分支中,但我需要运行一个命令,git pull
从origin/master
进入master
,但我无法运行git checkout
到newbranch
拉动完成后,更改所选分支。有没有办法做到这一点?
为了给出一些背景知识,存储库存储一个网站。我在newbranch
进行了一些更改,并通过将网站切换为master
来部署它们。现在这些更改已合并到master
分支的上游,我也试图将网站切换回newbranch
分支。此时,origin/master
和master
相同,但origin/master
落后$ git checkout master
# Uh oh, production website has now reverted back to old version in master
$ git pull
# Website is now up to date again
,需要更新。问题是,如果我采用传统方式:
git checkout master && git pull
我需要实现与上面相同的内容({{1}}),但不要在此过程中将工作目录更改为早期版本。
答案 0 :(得分:126)
直截了当:从远程分支更新为当前未签出的分支 master :
git fetch origin master:master
其中 origin 是您的遥控器,您目前在某个分支机构中签出,例如 dev的
如果您希望一次性更新当前分支以及指定的分支:
git pull origin master:master
答案 1 :(得分:84)
这里的答案如下: Merge, update, and pull Git branches without using checkouts
# Merge local branch foo into local branch master,
# without having to checkout master first.
# Here `.` means to use the local repository as the "remote":
git fetch . foo:master
# Merge remote branch origin/foo into local branch foo,
# without having to checkout foo first:
git fetch origin foo:foo
答案 2 :(得分:20)
事实证明,答案看似简单:
$ git fetch # Update without changing any files
$ git branch -d master # Remove out-of-date 'master' branch
$ git checkout --track origin/master # Create and check out up-to-date 'master' branch
这使您可以更新master
分支而无需切换到它,直到更新之后
答案 3 :(得分:11)
你担心无法修复的东西,因为Git操作不是原子的。即使您在没有先切换到主服务器的情况下更新主服务器,您的工作目录也会在分支之间中途。这就是为什么 Git不是部署工具。
由于您实际上并未在生产环境中提交代码(我希望),您实际上并不需要 来检查分支。您只需执行git fetch
更新远程引用,然后git checkout origin/master
将工作目录直接移动到origin/master
当前指向的提交。这将使你处于一个独立的头状态,但同样,因为你没有提交代码,这没关系。
这是你将要获得的最小洞,但正如我所说,洞仍然存在; checkout
不是原子的。
答案 4 :(得分:6)
你有一个你不想触摸的工作树,所以再使用另一个。克隆价格便宜,专为此而打造。
git fetch origin master # nice linear tree
git clone . ../wip -b master # wip's `origin/master` is my `master`
cd ../wip # .
git pull origin origin/master # merge origin's origin/master
git push origin master # job's done, turn it in.
cd ../main
rm -rf ../wip # wip was pushed here, wip's done
git checkout master # payload
这里所有其他答案的问题是,它们实际上并没有拉动。如果你需要合并或者rebase你已经设置了拉,你需要另一个工作树和上面的程序。否则只需git fetch; git checkout -B master origin/master
即可。
答案 5 :(得分:3)
您可以使用update-ref:
git fetch
git update-ref refs/heads/master origin/master
git checkout master
请注意,这会丢弃master分支中的任何本地提交。在你的情况下,将没有任何所以这是可以的。对于尝试在有本地提交的情况下执行此操作的其他人,我认为这是不可能的,因为merge只能在当前分支上运行。
答案 6 :(得分:2)
Malvineous的解决方案适合我
$ git fetch # Update without changing any files $ git branch -d master # Remove out-of-date 'master' branch $ git checkout --track origin/master # Create and check out up-to-date 'master' branch
只是给出错误
warning: not deleting branch 'master' that is not yet merged to
'refs/remotes/origin/master', even though it is merged to HEAD.
error: The branch 'master' is not fully merged.
If you are sure you want to delete it, run 'git branch -D master'.
所以我用-D选项运行
感谢
答案 7 :(得分:0)
git fetch origin master:master
master
。 master
上的更改,origin/master
将被合并到您的母版中。