所以有时候我在分支上工作,我想引入自分支创建以来对原点/主节点所做的更改。通常,仅做git merge master
是不够的,因为本地主服务器可能没有远程主服务器的更改,因此我发现自己必须这样做:
# save any uncommitted changes (if there are any)
git stash
# update master first:
git checkout master
git pull
# back to where we were:
git checkout <previous branch>
git stash pop # omit if git stash not done
# and finally the actual merge:
git merge master
当然有一个较短的方法,只有一个或两个git命令?
答案 0 :(得分:3)
一个命令:
git pull origin master:master
让我将其拆分并解释。 git pull master:master
等同于
git fetch origin master:master
git merge master
git fetch origin master:master
的意思是:从远程origin
分支master
获取新提交,并更新本地分支master
指向与远程master
相同的提交。这就是你要做的
git checkout master
git pull
git checkout <previous branch>
但速度更快(无需2次结帐)。
如果需要隐藏,请添加--autostash
:
git pull --autostash origin master:master
答案 1 :(得分:1)
我经常面对您的情况,并且很快就厌倦了像您描述的那样来做它,所以我创建了别名master
而不进行切换。
我在[alias]
的{{1}}部分中创建了一个别名,以将~/.gitconfig
(或任何分支)更新为master
,而无需检出。
以下是此别名的简单(但不安全)版本:
origin/master
您通过输入 ff = !sh -c 'git update-ref refs/heads/$1 origin/$1' -
来调用它,并且它使用git ff some_branch
将该分支设置为update-ref
。
定义此别名后,您的操作将变为:
origin/some_branch
但是,这是不安全的,因为即使不等同于快速合并,它也会进行更新,因此可能会丢弃某些提交。这是此别名的第二个版本,带有保护措施,因此它只能进行快速转发,而在其他情况下则拒绝执行任何操作:
git fetch
git ff master
git merge master
我经常发现不安全别名也很有用,特别是当我确实想放弃分支的本地副本上的某些工作时,所以我也将其保留为 # Do a fast-forward merge on the branch specified as argument, as long
# as it's safe: $1 is not checked out, and a fast-forward merge is possible.
ff = !bash -c '\
if [[ `git symbolic-ref HEAD` = refs/heads/$1 ]] ";" then \
echo $1 is checked out, use pull or merge instead. ";" \
else \
git update-ref refs/heads/$1 origin/$1 `git merge-base origin/$1 $1` ";" \
fi' -
:
ff-force
我的两个别名的已知限制:遥控器必须称为 # Not safe - reset the specified branch to its state on origin, even if it's not a fast-forward merge and potentially throws away some commits
ff-force = !sh -c 'git update-ref refs/heads/$1 origin/$1' -
。
答案 2 :(得分:0)
我愿意
git fetch origin develop
-获取最新更改,但不要将其合并到本地develop
-git merge origin/develop
-合并