我在我的仓库上执行了某些操作。 (这实际上是尝试将svn分支与git同步,但是为了这个问题,我们假装它们是未知的 - 只是尽量保持最小化,正如SO指导所建议的那样)。在那之后,我最终得到了一个不基于任何东西的分支broken_branch
。只有一次没有任何父母的提交。
$ git lg
* 5757abc - (HEAD, origin/branches/broken_branch, broken_branch) ~ Some broken branch commit message (58 minutes ago) <AuthorName>
但是,我知道这个提交应该基于其他带有哈希的提交,比如来自abc1234
分支的master
。所以,我尝试做一个合乎逻辑的事情,改变:
$ git rebase abc1234
First, rewinding head to replay your work on top of it...
Applying: ~ Some broken branch commit message
Using index info to reconstruct a base tree...
<stdin>:829: trailing whitespace.
userData:
<stdin>:839: trailing whitespace.
userData:
<stdin>:849: trailing whitespace.
userData:
<stdin>:859: trailing whitespace.
userData:
<stdin>:869: trailing whitespace.
userData:
warning: squelched 204361 whitespace errors
warning: 204366 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging Path/To/File/Class.cs
CONFLICT (add/add): Merge conflict in Path/To/File/Class.cs
Failed to merge in the changes.
Patch failed at 0001 ~ Some broken branch commit message
The copy of the patch that failed is found in:
/Path/To/Project/.git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
其中Path/To/File/Class.cs
是在broken_branch
的单个提交中修改的文件。实际上,有20个文件被修改过,对于每一个文件我都得到了相同的信息。
(我已经替换了这个问题中的所有字符串,以免意外泄漏任何东西,但我努力使一切都保持一致)。
所以,我有这些问题:
git rebase
来解决这个问题吗?或者我应该使用别的东西吗?broken_branch
最初是在这个特定的提交中创建的(在svn中,但是让svn保持在问题的范围之外)。答案 0 :(得分:0)
据我所知,你希望你的git repo看起来像这样:
abc1234
|
5757abc'
其中5757abc&#39;的内容完全匹配5757abc并且是abc1234的孩子?如果是这样,那么你可以这样做:
# Create test_branch pointing to commit 5757abc
git checkout -b test_branch 5757abc
# Reset test_branch to point to abc1234, but do not change the index
# or working copy (these still contain everything in 5757abc)
git reset --soft abc1234
# Commit your changes
git commit -m "My New Commit"
参考:https://git-scm.com/blog/2011/07/11/reset.html
这将根据需要修改git历史记录。
您还可以修改<repo>/.git/refs/remotes/origin/branches/broken_branch
,以便origin/branches/broken_branch
指向此新提交。
但是,我不知道git-svn在此之后是否能正常工作。在尝试此操作之前一定要备份!