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

在使用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 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
中提取特定分支时,它们都不会被更新-更新的只是临时ref
fetch_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
选项,它似乎非常适合我的工作流程。这对我来说太棒了!顺便问一下,我们怎么能忽略
未老化/未提交的更改