Mal*_*ous 116 git branch git-branch
当您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
Run Code Online (Sandbox Code Playgroud)
我需要实现与上面的相同(git checkout master && git pull),但是在此过程中不需要将工作目录更改为早期版本.
Mar*_*ter 147
简单明了:从远程分支更新为当前未签出的分支主服务器:
git fetch origin master:master
Run Code Online (Sandbox Code Playgroud)
其中,原产地为你的遥控器和你在一些分支如当前已签出开发.
如果您希望一次性更新除指定分支之外的当前分支:
git pull origin master:master
Run Code Online (Sandbox Code Playgroud)
fan*_*e89 88
这里的答案是:在 不使用签出的情况下合并,更新和拉取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
Run Code Online (Sandbox Code Playgroud)
Mal*_*ous 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
Run Code Online (Sandbox Code Playgroud)
这使您可以更新master而无需切换到它,直到分支后它已被更新.
mea*_*gar 11
你担心无法修复的东西,因为Git操作不是原子的.你将永远有一个洞,你的工作目录是中途分支之间,即使你不先切换到它更新的主人.这就是Git不是部署工具的原因.
由于在生产环境中,你实际上并没有提交代码(我希望),你实际上并不需要有一个分支签出.您只需执行a git fetch更新远程引用,然后git checkout origin/master将工作目录直接移动到当前指向的提交origin/master.这将使你处于一个独立的头状态,但同样,因为你没有提交代码,这没关系.
这是你将要获得的最小的洞,但正如我所说,一个洞仍然存在; checkout不是原子的.
你有一个你不想触摸的工作树,所以再使用另一个.克隆便宜,它是为此而建的.
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
Run Code Online (Sandbox Code Playgroud)
这里所有其他答案的问题是,它们实际上并没有完成拉动.如果你需要合并或者rebase你已经设置了拉,你需要另一个工作树和上面的程序.否则就git fetch; git checkout -B master origin/master会这样做.
| 归档时间: |
|
| 查看次数: |
61662 次 |
| 最近记录: |