我的方案有:我之前做了一个git svn dcommit - 如何修复我的回购?
- 我的本地机器的git回购
- 在GitHub上的远程
- 一个SVN服务器的局域网
的SVN服务器上仍然是规范的,但保持与GitHub回购相当。其他用户只使用SVN,而我是唯一的git + SVN用户(这简化了事情)。
当我在其他计算机上工作时(例如,我的笔记本电脑,在家,在国外时),我使用git,并使用GitHub回购推/拉我的提交。直到我在办公室时,我的提交才会被放入SVN。
当我在办公室我我会做一个git pull
带来-在从GitHub任何新的提交,然后做git svn dcommit
,随后git push -f
回到GitHub上,因此新SVN标注的承诺成为佳能在GitHub和匹配SVN完美。
但是,今天我的办公室计算机上有一些悬而未决的提交 - 但我也有非提交的提交 - 我不知道如何解决它。
上午9:00今天上午,在运行任何命令anyhere之前,我的回购协议是这样的:
o = Normal Git commit, lacking SVN annotation
* = SVN-annotated Git commit
GitHub
*---*---*---*---o---o---o---o---o
A B C D E F G H I
Local computer git repo
*---*---*---*---o---o
A B C D E F
SVN
*---*---*---*
A B C D
说明:我有两次提交,E
和F
这是在我的本地计算机回购先前从拉GitHub,这些提交还没有到SVN的dcommit
'd。
今天早上我犯了一个错误,我立即在本地计算机上运行git svn dcommit
,没有先运行git pull
。运行git svn dcommit
造成回购进入这种状态:
GitHub
*---*---*---*---o---o---o---o---o
A B C D E F G H I
Local computer git repo
*---*---*---*---*---*
A B C D E' F'
SVN
*---*---*---*---*---*
A B C D E' F'
注意E
和F
现在E'
和F'
,因为他们已经通过git svn
修改为一个SVN注解提交(所以它有一个不同的提交哈希值,即使它代表相同的代码库状态)。我的原始E
和F
在GitHub中保持不变。
我的电脑确实在后台git fetch
反正所以我现在有GitHub的我的电脑上提交E
通过I
和GitKraken显示我怎么现在有并排侧分支是发散后提交D
:
Local computer git repo:
*---*---*---*---*---* (master)
A B C D E' F'
\
\-o---o---o---o---o (remote-master)
E F G H I
我该如何解决这个问题? (因为Git-SVN注释的提交实际上是不可变的)。
我想我想要做的就是重新设置父级G
后F'
等忽略E
和F
,然后运行git svn dcommit
,然后做一个git push -f
回到GitHub上。
...问题是,我不知道如何重置G
- 我正在查看类似cherrypick
的命令,但这似乎不是我所追求的,而GitKraken不会让我rebase
(它不是一个菜单任何在remote-master
分支中的任何选项)。