git开关支路和支路
我的组织不相信合并提交。因此,我们在git开关支路和支路,git,version-control,Git,Version Control,我的组织不相信合并提交。因此,我们在master上工作,并将其挑选到一个典型的稳定分支,我将在这里命名为stable。(我们还有一个遥控器,origin,它简化了这里的一些命令) 因此,我当前的流程如下所示: $ git branch * master stable # do some work and commit it to 'master' $ git commit -a -m "some message" # rebase on 'origin/master'
master
上工作,并将其挑选到一个典型的稳定分支,我将在这里命名为stable
。(我们还有一个遥控器,origin
,它简化了这里的一些命令)
因此,我当前的流程如下所示:
$ git branch
* master
stable
# do some work and commit it to 'master'
$ git commit -a -m "some message"
# rebase on 'origin/master' because there were commits by colleagues in the meantime
$ git fetch && git rebase origin/master
$ git push origin master
# here's the rub: switch to 'stable', which is present in the local repo and behind 'origin/stable'
$ git checkout stable
# now update (a fetch may be necessary before, depending on how busy the remote repo is), git pull would also do
$ git merge --ff-only
# cherry-pick, push etc.
$ git cherry-pick master ...
我的问题是,切换到现有的本地分支,然后进行更新,会导致冗余操作:恢复过时的文件。基本上,我去一个地方只是为了去另一个地方,如果有直达路线的话:
# suppose I have pushed my changes to origin/master already
$ git branch -d stable
# some git grumbling, but origin/stable is ahead, so no commits are lost and the operation has proceeded
$ git checkout stable
当然,我可以把它做成别名。但我想知道:有没有更好的方法切换到分支并将其更新到远程状态?也有可能我忽略了我的提案中可能存在的问题。你现在做的很好,但是,如果您想强制您的
stable
匹配您的origin/stable
,同时进入您的stable
,请分别使用git checkout
或git开关
和-B
选项以及这两个名称。即:
git fetch # if needed
git checkout -B stable origin/stable
这有点危险,因为它无法验证原点/稳定
是否严格领先于稳定
,即此分支重置过程将导致快进。为了确保它是快进的,而您不在上面,您可以使用相当模糊的序列:
git push . origin/stable:stable
或同等标准:
git fetch . origin/stable:stable
您可以通过以下方式将后者与git fetch结合使用:
git fetch origin stable:stable
如果对稳定的进行的调整不是快进,则会因非快进错误而被拒绝
(当当前分支命名为stable
时,所有这些都不起作用;在这种情况下,请使用git merge--ff only origin/stable
向前移动,或获取错误。)
(我建议您编写一个小脚本来完成您想做的事情,并让它处理各种各样的紧急情况,例如检查您当前的分支名称。)首先获取所有更改,包括远程主分支和稳定分支
git fetch--all
然后您可以通过以下命令快速重置本地稳定分支
git分支-f稳定原点/稳定
您可以在切换分支后进行樱桃拾取
git开关稳定
根据我的经验,你使用的流程很奇怪。既然您使用cherry pick将提交同步到稳定分支(它将在目标分支上生成新的提交,尽管它们具有相同的内容),那么在master和origin/master上执行的rebase
操作的含义是什么?
不建议在长期分支上使用cherry pick。我不设计我们的工作流。在origin/master上重新设置基础是为了让我提交master上的最新版本/确保其他人在master上完成的所有工作都包括在内。