在Git Bash中,我试图将 branchTheirs 合并到 branchMine 中。运行git merge branchTheirs
时,我遇到需要解决的合并冲突。这些合并冲突显示在CLI中的“未合并的路径:”部分的下方。
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: src/main/java/gov/hrsa/nextgen/sitepoc/api/config/CachingConfiguration.java
both modified: src/main/java/gov/hrsa/nextgen/sitepoc/api/constants/ApiDocumentationConstants.java
好的,这就是我的期望。
但是,在CLI的“要提交的更改:”部分(暂存区域?)下面,有一长串文件,有些是经过修改的,有些是新的,我不想将它们与冲突的文件一起推送。
Changes to be committed:
modified: ../career-portal-api/pom.xml
modified: ../career-portal-api/src/main/java/gov/hrsa/nextgen/cp/api/CareerPortalApiApplication.java
modified: ../career-portal-api/src/test/resources/test.properties
[very long list of files in numerous drectories]
如何在提交未冲突的文件之前删除所有暂存的文件?
答案 0 :(得分:2)
如何在提交未冲突的文件之前删除所有暂存的文件?
首先,正确的答案可能是:不要这样做。(除非您做的是非常高级的事情。)
第二,如果您想执行此操作,则可以在每个这样的文件上使用git reset
,一次使用一个,也可以全部使用一个命令,例如:
git reset -- file1 file2 ... fileN
请记住,将文件的索引副本改回以匹配文件的HEAD
副本的效果意味着下一次提交将不使用从其他提交-即,丢弃其他人在其另一个分支上所做的更改的 all ,使所有文件与分支中的文件相同。
这种重置类似于git checkout HEAD -- file1 file2 ... fileN
,除了git checkout
变体不仅将HEAD
副本复制到索引,还复制索引副本(现在是(与HEAD
副本相同)到工作树,以便您可以看到要提交的内容。这将完全失去合并工作,几乎可以肯定这不是您想要的。因此,git reset
可能比git checkout
更为明智,但似乎没有一个人像您想要的那样。
不过,如果您想要的是 ,则可以使用git status --short
或git status --porcelain
获得更方便使用的文件名列表。例如:
git status --short > /tmp/instructions
[edit /tmp/instructions; replace first three columns of each line with `git reset --`]
sh /tmp/instructions # run each `git reset`
通过git reset
而不是git checkout
而不是工作树副本,意味着git status
现在将比较索引和工作树,并显示很多{{1 }}。如果您使用changes not staged for commit
,则第二列中的字母将显示为字母-第一列字母将显示git status --short
和索引之间的差异。
(这样复位或签出通常是程序员在合并过程中抛弃他人工作的两种方式之一,通常不打算这样做。因此,建议“不要”。使用:
HEAD
(是Gomes's answer的略微变体,表示将git reset -- .
中的所有文件从当前目录向下递归复制到索引。从顶层完成,这不仅会重置您通过合并带来的更改,而且还会重置有冲突的条目。也许那也不是你想要的。)
答案 1 :(得分:1)
git reset HEAD -- .
这可能会解决问题。 git reset head
是用于取消暂存文件的命令,.
会重置当前目录中的所有内容。
注意。如torek所述,命令git reset HEAD
将清除正在进行的合并的记录。但是,如果该命令与git reset HEAD myfile.txt
之类的文件名一起使用,它将简单地取消登台文件,这意味着如果您提交,则该文件将不包含在提交中。