如何将git拉到一个不是现在的分支?

当你在master分支上运行git pull的时候,它通常会从origin/master拉出来。 我在一个不同的分支称为newbranch ,但我需要运行一个命令,做一个从origin/masternewbranch ,但我不能运行git checkout更改选定的分支,直到拉完成。 有没有办法做到这一点?

为了给出一些背景知识,存储库存储一个网站。 我在newbranch做了一些改变,并通过将网站切换到newbranch来部署它们。 现在这些更改已经合并到master分支上游,我正在尝试将网站切换回master分支。 在这一点上, newbranchorigin/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分支。