Git 通过一个命令(或仅几个命令)拉动、重新固定、推动
在使用Git时,我经常发现自己在Git 通过一个命令(或仅几个命令)拉动、重新固定、推动,git,merge,rebase,git-rebase,Git,Merge,Rebase,Git Rebase,在使用Git时,我经常发现自己在master中工作时会执行以下操作: # work work work... $ git checkout -b temp $ git commit -a -m 'more work done' $ git checkout master $ git pull origin master # turns out master was updated since my previous pull $ git checkout temp # I don't want
master
中工作时会执行以下操作:
# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git checkout master
$ git pull origin master
# turns out master was updated since my previous pull
$ git checkout temp
# I don't want a merge commit for a simple bugfix
$ git rebase master
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp
git commit -a -m 'more work done'
git fetch origin
git rebase origin/master
# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git fetch origin
# It looks like origin/master was updated, so:
$ git rebase origin/master
# Then when you finally want to merge:
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp
。。。我厌倦了这样做。有没有一种方法可以在不进行所有签出的情况下完成此舞蹈,最好是不(手动)创建临时分支?如果您不介意不创建名为
temp
的分支,您可以在master
上执行以下操作:
# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git checkout master
$ git pull origin master
# turns out master was updated since my previous pull
$ git checkout temp
# I don't want a merge commit for a simple bugfix
$ git rebase master
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp
git commit -a -m 'more work done'
git fetch origin
git rebase origin/master
# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git fetch origin
# It looks like origin/master was updated, so:
$ git rebase origin/master
# Then when you finally want to merge:
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp
。。。或相当于:
git commit -a -m 'more work done'
git pull --rebase origin master
但是,如果您确实想保留temp
分支,您仍然可以通过不签出master
来缩短此分支,只需执行拉入
-您只需要获取
,然后将分支重新设置到源代码/master
:
# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git checkout master
$ git pull origin master
# turns out master was updated since my previous pull
$ git checkout temp
# I don't want a merge commit for a simple bugfix
$ git rebase master
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp
git commit -a -m 'more work done'
git fetch origin
git rebase origin/master
# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git fetch origin
# It looks like origin/master was updated, so:
$ git rebase origin/master
# Then when you finally want to merge:
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp
提醒我您可以替换:
$ git fetch origin
$ git rebase origin/master
。。。与:
$ git pull --rebase origin master
。。。这几乎是相等的。不同之处在于,当您运行
git fetch origin
时,origin
的所有远程跟踪分支都将被更新,而当您从origin
中提取特定分支时,它们都不会被更新-更新的只是临时reffetch_HEAD
。我个人更喜欢运行一个额外的命令(git fetch origin
),并查看输出中已更改的所有远程分支。您至少可以优化重定基址:
我不确定你喜欢什么,但我喜欢我的工作流程,有点像这样:
git checkout -b temp
git commit -a -m 'more work done'
git pull --rebase origin master
这样我就可以把注意力集中在手边的树枝上
后来,我知道了
git checkout master
git pull origin master
git merge temp
等等。太好了!我不知道
--rebase
选项,它似乎非常适合我的工作流程。这对我来说太棒了!顺便问一下,我们怎么能忽略未老化/未提交的更改?