以下方案详细介绍了远程git repo上错误的文件。如果您滚动浏览下面的提交,那么问题确实出现在COMMIT 4
中,而实际上是关于它是否出乎意料/预期的,我想知道是否有一种常见的方法来解决此问题。最好避免在分支中完全避免使用不必要的文件,但是当遇到COMMIT 4
中的情况时,但是我的问题是应该做什么?
COMMIT 1 (18 days ago): created on local repo file <code1.java> on branch [code1]
and pushed to remote branch [code1] for initial commit
of the file
COMMIT 2 (14 days ago): changed a variable in the file <code1.java> on branch [code1]
and pushed to remote branch and created PR
COMMIT 3: (7 days ago): created on local repo the file <code2.java> on branch [code2]
and pushed to remote branch [code2] for initial commit
COMMIT 4: (6 days ago): **noticed that on [code2] branch I somehow had checked in
<code1.java> with commit 3** so I deleted the file <code1.java>
from branch [code2] and pushed to remote branch [code2]
and did a PR for [code2]
COMMIT 5: (5 days ago): changed formatting on file <code2.java> on branch [code2]
COMMIT 6: (4 days ago): PR reviewer accepted changes to <code1.java>
and merged branch [code1] to master
COMMIT 7: (3 days ago): PR reviewer accepted changes to <code2.java>
and merged branch [code2] to master
code1.java现在消失了:( :( :(
听起来您是基于code1
而不是master
的code2
分支。当您这样做时,您包括当时该分支中的所有代码,包括code1.java
。
当您合并code2
时,GIT仅考虑合并三分:合并基础(提交2(和两个头。由于该文件在一侧没有变化(提交6(,并且在另一侧进行了修改(删除(,因此GIT应用了修改并删除了文件。
在这种情况下,code2
包含code1.java
是可以的,因为它基于包含它的分支:这不是您包含的无关更改。通过删除它,您实际上确实引入了无关的更改(删除(,这与您的意图相反。
最简单的方法避免这种情况时总是要在项目上工作时分支master
,这意味着您不会有多余的东西要删除。如果您意外地基于另一个分支,则可以进行git rebase --onto master code1
,该分支将使您的分支基于code1
并将其放在master
上。然后,您可以检查它以查看将来是否需要添加或删除内容。
您可以用
检索它git checkout <commit4-SHA1>^ -- path/to/code1.java
(请注意卡雷(^
(的意思是"此提案的父母"(
然后将其作为新文件检测到git status
。只需添加并提交。
如果删除是上述COMMIT 4
中唯一的变化,则可以通过git revert <commit4-SHA1>