1

假设我有一堆由变更集 X 修改的文件。这个变更集当前是 HEAD。我想将对匹配正则表达式'*Test.java'的文件的所有更改分离到另一个变更集中。如果我做:

git diffstat HEAD^ HEAD

我目前会得到类似的东西:

M       a/b/c/ThisIsSomeClass.java
M       a/b/c/d/ThisIsSomeTest.java
M       a/JustAnotherClass.java
M       a/b/c/AnotherTest.java

我可以执行哪些 git 命令序列来将 *Test.java 文件分离到另一个变更集中?

4

1 回答 1

2

像这样的东西应该工作。确保首先在您的 Git 存储库的副本中运行它,以确保它正常工作;如果你在跑步时不小心reset,就有可能丢掉工作。一般来说,当进行这样的操作时,你应该确保你的目录是干净的;一切都应该被提交、隐藏或忽略,因此周围没有任何重要的更改或未提交的文件。

git reset --soft HEAD^
git reset $(git diff --cached --name-only -- '*Test.java')
git commit -m "This is the first commit, that does not contain the *Test.java"
git add -u .
git commit -m "This is the second commit, of just the *Test.java files"

reset --soft会将您重置为 commit ,但您上次提交的HEAD^所有更改仍处于暂存状态,可以提交。下一个git reset将取消暂存所有已更改的名为 的文件*Test.java,而其他文件仍处于暂存状态。提交将提交那些仍处于暂存状态的更改。现在您再次暂存所有其他文件,使用git add -u .(这只会暂存已更改的文件,不会添加新文件,因此即使您有其他不想添加的文件也可以安全运行您的提交;如果您在执行此操作的过程中确实有未暂存的新文件,请单独删除-u或添加它们)。然后你提交第二组文件。

于 2013-05-03T20:05:35.390 回答