Git 重新设置专用分支基础的命令数最少
我仍在对Git充满信心的过程中,因此我仍在谨慎地处理其中的一些元素 我在工作时为我的私有分支重定基址的命令列表(以便在我完成时它不会过时)是: 我想知道的是,当我想重新设置基础时,是否可以节省一些步骤并执行以下操作:Git 重新设置专用分支基础的命令数最少,git,rebase,Git,Rebase,我仍在对Git充满信心的过程中,因此我仍在谨慎地处理其中的一些元素 我在工作时为我的私有分支重定基址的命令列表(以便在我完成时它不会过时)是: 我想知道的是,当我想重新设置基础时,是否可以节省一些步骤并执行以下操作: # on the new-feature branch git fetch git rebase origin/develop # continue working.... 或者,当我将我的私人分行与develop合并时,这会导致问题吗?如果可以的话,如果我已经在我的私有分支中完
# on the new-feature branch
git fetch
git rebase origin/develop
# continue working....
或者,当我将我的私人分行与develop合并时,这会导致问题吗?如果可以的话,如果我已经在我的私有分支中完成了,我是否需要将origin/develope与develope合并?所述的获取和重新设置基础就可以了。对于第二个问题,我不太确定你在问什么,所以下面的内容涵盖了所有的基础 (请注意,
git pull
主要是git fetch
,然后是git merge
,除非您将其配置为执行rebase
。我将在下面仅使用git merge
,前提是您已经完成了足够近期的fetch
)
以下是您将得到的结果,假设在origin/develope
上正在进行的活动以及在commit D1上进行origin/develope的起点:
... - M6 <- master, origin/master
\
D0 - D1 <- develop, origin/develop
\
N0 - N1 <- HEAD=new_feature
所以现在(使用HEAD=new_功能,所有功能都指向commitN1
),您可以:
git做到了这一点,进行了两次新的提交N0'
和N1'
:
N0' - N1' <- HEAD=new_feature
/
D2 - D3 <- origin/develop
/
D0 - D1 <- develop
\
N0 - N1 [abandoned]
与以前一样,“被抛弃”的东西可以被遗忘,这为您提供了一个从origin/develope
末尾开始的清晰的更改历史记录(不管有多少次重新设置)
在任何时候,您都可以,但不必:
git checkout develop && git merge origin/develop && git checkout new_feature
由于您没有在D1
上添加任何提交,因此这只是快进,因此develope
指向与origin/develope
相同的提交
假设您尚未操作本地开发
,但现在是时候合并到新功能
,您现在有了以下功能:
N0''-N1''-N2' <- HEAD=new_feature
/
D2 - D3 - D4 <- origin/develop
/
D0 - D1 <- develop
这就给了你这个(我将理顺D1
和D2
之间的纠结):
但是,如果您不希望合并提交,那么当您执行最终的合并
时,develope
指向何处并不重要,因为它只是在快速前进。因此,您可以这样做:
git checkout develop # set HEAD=develop
# git merge origin/develop # optional: not needed, but harmless
git merge new_feature # fast-forward local develop to new_feature
git push origin develop # and push local develop to origin/develop
首先要弄清楚“我希望得到什么样的提交图”。如果你能画出你想要的图形,那么无论你现在身在何处,都能更容易地找到你想要的图形。如图所示的抓取和重新设置基础很好。对于第二个问题,我不太确定你在问什么,所以下面的内容涵盖了所有的基础
(请注意,git pull
主要是git fetch
,然后是git merge
,除非您将其配置为执行rebase
。我将在下面仅使用git merge
,前提是您已经完成了足够近期的fetch
)
以下是您将得到的结果,假设在origin/develope
上正在进行的活动以及在commit D1上进行origin/develope的起点:
... - M6 <- master, origin/master
\
D0 - D1 <- develop, origin/develop
\
N0 - N1 <- HEAD=new_feature
所以现在(使用HEAD=new_功能,所有功能都指向commitN1
),您可以:
git做到了这一点,进行了两次新的提交N0'
和N1'
:
N0' - N1' <- HEAD=new_feature
/
D2 - D3 <- origin/develop
/
D0 - D1 <- develop
\
N0 - N1 [abandoned]
与以前一样,“被抛弃”的东西可以被遗忘,这为您提供了一个从origin/develope
末尾开始的清晰的更改历史记录(不管有多少次重新设置)
在任何时候,您都可以,但不必:
git checkout develop && git merge origin/develop && git checkout new_feature
由于您没有在D1
上添加任何提交,因此这只是快进,因此develope
指向与origin/develope
相同的提交
假设您尚未操作本地开发
,但现在是时候合并到新功能
,您现在有了以下功能:
N0''-N1''-N2' <- HEAD=new_feature
/
D2 - D3 - D4 <- origin/develop
/
D0 - D1 <- develop
这就给了你这个(我将理顺D1
和D2
之间的纠结):
但是,如果您不希望合并提交,那么当您执行最终的合并
时,develope
指向何处并不重要,因为它只是在快速前进。因此,您可以这样做:
git checkout develop # set HEAD=develop
# git merge origin/develop # optional: not needed, but harmless
git merge new_feature # fast-forward local develop to new_feature
git push origin develop # and push local develop to origin/develop
首先要弄清楚“我希望得到什么样的提交图”。如果你能画出你想要的图表,那么无论你现在身在何处,都能更容易地找到到达目的地的方法。这是我所希望的更彻底的答案。非常感谢你。你最后一组命令就是我最后一个问题的答案。但我很感谢你提供的额外的清晰。这是我所希望的更彻底的答案。非常感谢你。你最后一组命令就是我最后一个问题的答案。但我很感谢你提供的额外清晰。
N0''-N1''-N2' <- new_feature, HEAD=develop, origin/develop
/
...D1 - D2 - D3 - D4
N0''-N1''-N2' <- new_feature
/ \
...D1 - D2 - D3 - D4 ------------ M <- HEAD=develop, origin/develop
git checkout develop # set HEAD=develop
git merge origin/develop # fast-forward develop to origin/develop
git merge --no-ff new_feature # create merge commit M on local develop
git push origin develop # and push local develop to origin/develop
git checkout develop # set HEAD=develop
# git merge origin/develop # optional: not needed, but harmless
git merge new_feature # fast-forward local develop to new_feature
git push origin develop # and push local develop to origin/develop