Git 意外地合并到错误的分支到我的。有没有办法删除这些不需要的文件?
我不小心把一个同事分支合并到了我正在工作的分支中。从那以后,我做了几次提交,所以理想情况下我不想恢复到合并之前分支的状态。然而,我没有做任何改变他的文件的事情 我有没有办法把他的分公司的文件从我的文件中删除Git 意外地合并到错误的分支到我的。有没有办法删除这些不需要的文件?,git,merge,Git,Merge,我不小心把一个同事分支合并到了我正在工作的分支中。从那以后,我做了几次提交,所以理想情况下我不想恢复到合并之前分支的状态。然而,我没有做任何改变他的文件的事情 我有没有办法把他的分公司的文件从我的文件中删除 (对不起,我是git新手-希望我已经记下了术语)。也许这里最简单、最安全的选择是恢复您在几次提交之前进行的合并提交。要执行此操作,请使用git log在历史记录中查找合并提交,并记录该提交的SHA-1哈希。然后,执行以下操作: git revert -m 1 <SHA-1> g
(对不起,我是git新手-希望我已经记下了术语)。也许这里最简单、最安全的选择是恢复您在几次提交之前进行的合并提交。要执行此操作,请使用
git log
在历史记录中查找合并提交,并记录该提交的SHA-1哈希。然后,执行以下操作:
git revert -m 1 <SHA-1>
git还原-m 1
此处
是要撤消的合并提交的哈希。-m1
选项告诉Git恢复到第一个父级,这是合并发起的分支,它应该是您的分支。如果您没有将提交推送到(发布)任何地方,最简单的修复方法是重新设置合并的基础。(即使已发布,也可以执行此操作,但请参见警告。)
命令git-rebase
复制提交,但默认情况下,它放弃合并提交。git-rebase
的正常目标是复制提交,以便它们位于不同的位置。例如,您可能有:
...--o--*--o--o <-- master
\
A--B--C <-- yourbranch
但是,由于git-rebase
通常会放弃合并,因此您可以将基础重新设置到现在的位置,并在此过程中放弃合并:
...--o--*--o--o--o--...
\ \
A--B--X--C--D <-- yourbranch
Git将要复制的提交列为“那些在*
之后,直到yourbranch
的顶端,任何合并除外”。那是A-B-C-D
。然后它“复制”A
(它不必这样做,因此它实际上在默认情况下会重新使用原始的A
,“复制”B
(同样也不必),复制C
(此时必须将原始的C
连接到X
,而新的B
),并复制D
,使yourbranch
指向上次复制的提交并放弃旧链:
...--o--*--o--o--o--...
\ \
A--B--X--C--D [abandoned]
\
C'-D' <-- yourbranch
随着C
和D
的消失,我们甚至不需要C'
和D'
标记。不过,我会把它们留在这里,只是把我们不再需要的纠结理顺:
...--o--*--o--o--o--...
\
A--B--C'-D' <-- yourbranch
…--o--*--o--o--o--o--。。。
\
A--B--C'-D'作为一个新的git用户,感谢heaps包含了
和-M1
的含义。这样做的缺点是git仍然相信合并发生了(因为它发生了!),所以如果你想合并的话,这可能会让你以后感到心痛。感谢你发布了这篇文章,非常有用+1.
...--o--*--o--o--o--...
\ \
A--B--X--C--D [abandoned]
\
C'-D' <-- yourbranch
...--o--*--o--o--o--...
\
A--B
\
C'-D' <-- yourbranch
...--o--*--o--o--o--...
\
A--B--C'-D' <-- yourbranch