如何将git拉到一个不是现在的分支?
当你在master
分支上运行git pull
的时候,它通常会从origin/master
拉出来。 我在一个不同的分支称为newbranch
,但我需要运行一个命令,做一个从origin/master
到newbranch
,但我不能运行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
),但是在这个过程中,不需要将工作目录改变到更早的版本。
你有一个你不想碰的工作树,所以用另一个。 克隆很便宜,它是为此而构build的。
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
这是在这里回答: 合并,更新,并拉动Git分支,而不使用结帐
# 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
直接向前:从远程分支拉入当前未检出的分支主机 :
git pull origin master:master
原产地是你的遥控器,你目前在某个分支,如dev
事实certificate,答案看似简单:
$ 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
分支的情况下更新master
分支,直到更新完成为止。
你担心的是一些不能修复的东西,因为Git操作不是primefaces的。 即使你没有先切换到主目录,你的工作目录也会在分支之间的一半处出现。 这就是为什么Git不是一个部署工具 。
既然你没有在生产环境中实际提交代码(我希望),你实际上并不需要签出一个分支。 你可以简单地做一个git fetch
来更新你的远程引用,然后通过git checkout origin/master
将工作目录直接移动到origin/master
指向的提交。 这会让你处于一个独立的状态,但是再一次,因为你没有提交代码,这并不重要。
这是你要得到的最小的洞,但正如我所说,洞还是存在的。 checkout
不是primefaces的。
你可以使用update-ref来达到这个目的:
git fetch git update-ref refs/heads/master origin/master git checkout master
请注意,这将丢弃主分支中的任何本地提交。 在你的情况下,不会有任何这样的事情。 对于其他人试图在有本地提交的地方这样做,我不认为这是可能的,因为合并只能在当前分支上运行。
Malvineous的解决scheme为我工作
$ 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选项
谢谢
不这样做(假设你在你的function分支):
git pull origin master
这将把最新的主人拉到你当前的function分支。