Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git开关支路和支路_Git_Version Control - Fatal编程技术网

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上完成的所有工作都包括在内。