仅保留一系列Git提交中的文件添加内容?

时间:2013-12-28 20:29:12

标签: git version-control

A<-B<-C成为Git提交的序列。

提交BC介绍3种类型的更改:

  1. 添加一些文件。
  2. 修改部分文件。
  3. 删除部分文件。
  4. 不幸的是,BC中类型2和3的更改被证明是错误的。因此,我们需要派生修改后的序列A<-B'<-C',其中B'C'仅包含原始AB中的文件添加内容,放弃任何修改或缺失。

    怎么办呢?

    如果有帮助,我们绝对不需要B'C'作为单独的提交;我们可以使用A<-D,其中D包含BC中添加的每个文件。

1 个答案:

答案 0 :(得分:2)

您可以尝试重置为A,并添加所有新文件:

# reset index, reset HEAD to A, preserve working tree.
git reset A

# Add only new files
git add $(git ls-files -o --exclude-standard)

# Make commit D (equals B and C new files)
git commit -m "only new files from B and C"

对于第二步(仅添加新文件),请参阅“Git add only all new files, not modified files”。


OP Dun Peal comments

  

C删除了B引入的一些文件。因此,C工作副本不包括B引入的所有文件。我想我可以一次迭代一次提交,并为每一个执行此操作。< / p>

是的,需要一种迭代方法:

git reset --hard B
git reset A
git add $(git ls-files -o --exclude-standard)
git commit -m "only new files from B"

这会产生提交B'

重复C,使用B'作为基础:

git reset --hard C
git reset B'
git add $(git ls-files -o --exclude-standard)
git commit -m "only new files from C"