[英]git-svn and local branches
我通常使用git进行版本控制,但是现在我在svn存储库中遇到了源代码,因此我使用git-svn来访问该存储库。 然而,当我尝试使用本地分支时,这似乎会导致一些麻烦。
我通常每天只提交一次本地存储库,所以我可能会在我的本地主服务器上提交,我还没有上传。 当我在此时创建分支,然后其他人提交到上游存储库时,当前的一个和上一个同步的提交之间的所有提交都会重复。
为了使这一点更加清晰:
A-B-C-D-E
\
\-F
上游存储库位于A处,两个分支处分别位于E和F. 做一个git svn rebase会导致:
A-G-H-B-C-D-E
\
\-B-C-F
其中G和H是从上游回购中提取的提交。 我已经尝试通过切换到另一个git svn rebase来将两个提交到另一个分支。 但这让我离开了:
A-G-H-B-C-D-E
\
\-G-H-B-C-F
因此,这会导致更多的提交重复。 有没有一种干净的方法来处理这种情况?
你应该在'git svn dcommit'之前使用'git svn rebase'来避免这些问题。 这反映了在提交之前更新的常见svn用法。 有关详细信息,请参阅http://git-scm.com/docs/git-svn中的 “REBASE VS. PULL / MERGE”部分。
您可以使用git rebase
将任何提交范围重新应用到任何特定提交,这听起来像您想要的。 这种技术适用于移动任何范围的提交,但正如我在底部提到的,如果你的分支上只有一个提交F
,那么它就更容易挑选。 但是,首先我将介绍如何使用git rebase
来实现它,因为这通常更有用。
(nb我要稍微重命名你的提交,因为两个B
s, C
s等在重新定位后会有不同的提交ID。)
git svn rebase
所以,如果你想在第一个git svn rebase
之后做这个git svn rebase
你会遇到这种情况:
A-G-H-B'-C'-D'-E'
\
\-B-C-F
此时,你可以做到:
git rebase --onto C' C F
......本来会创造的:
A-G-H-B'-C'-D'-E'
\ \
\-B-C-F \-F'''
git svn rebase
如果情况如您在第二个git svn rebase
之后描述的那样,那将是这样的:
A-G-H-B'-C'-D'-E'
\
\-G'-H'-B''-C''-F''
在这种情况下,您可以类似地做:
git rebase --onto C' C'' F''
要创建图表:
A-G-H-B'-C'-D'-E'
\ \
\ \- F'''
\
\-G'-H'-B''-C''-F''
......你可以忘记G'
到F''
。
但是,在这两种情况下,您只需移动一个提交,因此可能更容易选择提交。 换句话说,你可以这样做:
git checkout -b new-experiment C'
git cherry-pick F
我希望有一些用处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.