如果我在合并前忘了做一个git svn rebase怎么办?

时间:2013-01-14 02:22:11

标签: git git-svn

我正在使用git-svn并且已经在一个本地主题分支上进行一系列提交,并且在将我的更改合并回主服务器时遇到了一些麻烦。

这些步骤让我走到了以下的地方:

git commit  (on topic branch)
git checkout master
git svn fetch (numerous files pulled down from origin)
git merge <topic branch>

此时我遇到了一个合并冲突,我修复了这个冲突,然后做了一个git add <file>来添加我的固定文件。

现在我的git status报告所有文件(包括从服务器获取的所有文件)都是要提交的更改。我忘了做git svn rebase,我认为这是我的问题。

我总体而言是相当新的git所以我甚至不确定我所看到的是预期的行为,但似乎很可疑。我遗忘了git svn reabse让我陷入困境吗?我该怎么做才能摆脱这种潜在的混乱局面?

1 个答案:

答案 0 :(得分:2)

假设您正在使用trunk,请放弃合并提交

git reset --hard remotes/trunk

赶上Subversion的任何变化

git svn fetch
git svn rebase

现在你有两个选择。您可以重新定义主题分支上的工作并将其合并:

git checkout <topic branch>
git rebase remotes/trunk
git checkout master
git reset --hard remotes/trunk
git merge <topic branch>
git svn dcommit

您可能更喜欢使用squash-merge,这意味着将分支上的所有更改归结为单个提交。如上所述丢弃,获取和变基,然后

git merge --squash <topic branch>

清洁合并将转到您可以查看的索引

git diff --cached

任何冲突都将保留在工作树中,您可以使用

查看它们
git diff

解决所有冲突,使用git add,然后git commit进行处理以结束新提交。