LiK*_*Kao 5 svn git git-svn git-branch
我通常使用git进行版本控制,但是现在我在svn存储库中遇到了源代码,因此我使用git-svn来访问该存储库.然而,当我尝试使用本地分支时,这似乎会导致一些麻烦.
我通常每天只提交一次本地存储库,所以我可能会在我的本地主服务器上提交,我还没有上传.当我在此时创建分支,然后其他人提交到上游存储库时,当前的一个和上一个同步的提交之间的所有提交都会重复.
为了使这一点更加清晰:
A-B-C-D-E
\
\-F
Run Code Online (Sandbox Code Playgroud)
上游存储库位于A处,两个分支处分别位于E和F. 做一个git svn rebase会导致:
A-G-H-B-C-D-E
\
\-B-C-F
Run Code Online (Sandbox Code Playgroud)
其中G和H是从上游回购中提取的提交.我已经尝试通过切换到另一个git svn rebase来将两个提交到另一个分支.但这让我离开了:
A-G-H-B-C-D-E
\
\-G-H-B-C-F
Run Code Online (Sandbox Code Playgroud)
因此,这会导致更多的提交重复.有没有一种干净的方法来处理这种情况?
您可以将git rebase任何范围的提交重新应用到任何特定的提交上,这听起来就像您想要的那样。这种技术适用于移动任何范围的提交,但正如我在底部提到的,如果您的分支上确实只有一个提交F,那么选择樱桃会更容易。不过,首先我将描述如何使用 来做到这一点git rebase,因为这更普遍有用。
(注意,我将稍微重命名您的提交,因为这两个Bs、Cs 等在变基后将具有不同的提交 ID。)
git svn rebase因此,如果您想在第一次之后进行此变基,git svn rebase您将面临以下情况:
A-G-H-B'-C'-D'-E'
\
\-B-C-F
Run Code Online (Sandbox Code Playgroud)
此时,您可以这样做:
git rebase --onto C' C F
Run Code Online (Sandbox Code Playgroud)
...这会创建:
A-G-H-B'-C'-D'-E'
\ \
\-B-C-F \-F'''
Run Code Online (Sandbox Code Playgroud)
git svn rebase如果情况如您在第二个之后所描述的git svn rebase那样,则如下所示:
A-G-H-B'-C'-D'-E'
\
\-G'-H'-B''-C''-F''
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你也可以类似地这样做:
git rebase --onto C' C'' F''
Run Code Online (Sandbox Code Playgroud)
要创建图表:
A-G-H-B'-C'-D'-E'
\ \
\ \- F'''
\
\-G'-H'-B''-C''-F''
Run Code Online (Sandbox Code Playgroud)
...您可以忘记G'通过到F''。
但是,在这两种情况下,您只移动单个提交,因此挑选提交可能更容易。换句话说,你可以这样做:
git checkout -b new-experiment C'
git cherry-pick F
Run Code Online (Sandbox Code Playgroud)
我希望这有一些用处。
| 归档时间: |
|
| 查看次数: |
1593 次 |
| 最近记录: |