如何修复'git-svn'分支和'origin / master'有分歧

时间:2017-11-06 06:11:16

标签: git git-svn

在工作中,我使用Git作为SVN的客户端,使用git svn。我也将我的Git存储库推送到远程。 SVN存储库由我办公室的一个团队使用,而Git远程存储库目前仅供我使用。这是从SVN迁移到Git的过程的全部内容。

我的工作流程包括将我的更改提交到我的本地Git仓库,然后由其他人从SVN更改更新我的工作副本,提交到SVN,最后推送到Git远程。像这样:

$ git commit
$ git svn rebase
$ git svn dcommit
$ git push origin

这没有问题。

但今天,由于错误,我交换了最后两步,所以我推到了原点,然后我做了git svn dcommit。 这导致origin/master偏离master,但更重要的是偏离git-svn遥控器。现在git log看起来像这样:

$ git log --oneline --decorate --graph --all -5
* 613ffa60 (HEAD -> master, git-svn) Fix typo on message displayed to user
| * db2e67ef (origin/master) Fix typo on message displayed to user
|/
* 24d8fab9 Commit C
* c0c1b598 Commit B
* e31c07c0 Commit A

为简单起见,我修改了上面的提交消息,但请注意masterorigin/master中最后两个不同的提交实际上包含相同的更改。 我该如何解决这个问题?

我尝试了git rebase origin/mastergit reset --hard origin/master之类的各种内容,但我得到的只有masterorigin/master指向相同的提交。像这样:

$ git log --oneline --decorate --graph --all -5
* 613ffa60 (git-svn) Fix typo on message displayed to user
| * db2e67ef (HEAD -> master, origin/master) Fix typo on message displayed to user
|/
* 24d8fab9 Commit C
* c0c1b598 Commit B
* e31c07c0 Commit A

如果您不使用git-svn,那么这些将是解决方案,但如何让git-svn也指向相同的提交?我需要额外提交所有内容合并吗?

正如我之前所说,目前我是Git遥控器的唯一用户,所以如果有必要,我不介意在遥控器上重写历史记录。

1 个答案:

答案 0 :(得分:2)

作为背景:您遇到这种情况的原因是* 613ffa60 (HEAD -> master, git-svn) Fix typo on message displayed to user | * db2e67ef (origin/master) Fix typo on message displayed to user |/ * 24d8fab9 Commit C * c0c1b598 Commit B * e31c07c0 Commit A 更改了本地git提交,以将相应的SVN修订号添加到git commit消息中。

解决问题的方法非常简单。您需要确保您的git master与SVN处于同一提交状态,然后将其强制推送到您的git repo(origin)。

情况1的解决方案

如果你在这里:

git push --force

您只需要执行origin/master,它将使用您当前的本地分支覆盖* 613ffa60 (git-svn) Fix typo on message displayed to user | * db2e67ef (HEAD -> master, origin/master) Fix typo on message displayed to user |/ * 24d8fab9 Commit C * c0c1b598 Commit B * e31c07c0 Commit A 分支,它将再次同步。

情况2的解决方案

如果你在这里

master

执行以下操作,将本地$ git checkout master && git reset --hard git-svn && git push --force 带回SVN提交,然后将其强行推送到远程Git仓库:

git push --force

说明

请注意master只是因为您是远程Git仓库的唯一用户而没有问题。如果其他人也使用它,那么它们将与各自的import pandas as pd # create an example DataFrame to work with df = pd.DataFrame({"A": [1, 2], "B": [3, 4]}) # define equation eq = 'A + 3 / B' # actual computation df.eval(eq) # more complicated equation eq = "A + B + sqrt(B + 4)" df.eval(eq) 不同步,这将是更多的工作。