如何将我的更改从某些提交恢复到索引?

时间:2015-01-27 21:27:51

标签: git commit rebase

这是我的最佳提交历史:

5e1aaf7 final commit message
0356c0a add Toyota to Cars.txt
5498f0f add some cities to Cities.txt
e811024 add Cities.txt

我需要从这些提交到索引进行更改,并使用一个或多个提交提交它们。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您想要重做最后四次提交并将其作为一个更改进行处理。 git reset --soft HEAD~4

发生了什么事? git reset将当前分支标签移动到任意位置(git reset --,令人困惑,执行完全不同的操作),因此git reset HEAD~4表示将当前分支移回4次提交。

--soft--hard--mixed--merge--keep控制索引和工作副本会发生什么。 --soft单独留下索引和工作副本,因此您仍然可以使用磁盘上的旧HEAD进行操作。 --hard将索引和工作副本重置为新提交,类似于checkout。其余的我让你去阅读文档。

如果你只想将它们压在一起,你可以git rebase -i HEAD~4并使用squash命令。

pick e811024 add Cities.txt
s 5498f0f add some cities to Cities.txt
s 0356c0a add Toyota to Cars.txt
s 5e1aaf7 final commit message

如果你想单独改变它们,你可以rebase -i并使用编辑命令。只要知道它可能会导致您必须解决的冲突。

e e811024 add Cities.txt
e 5498f0f add some cities to Cities.txt
e 0356c0a add Toyota to Cars.txt
e 5e1aaf7 final commit message

如果您只想更改上次提交,则可以进行编辑并执行git commit --amend。如果您只是想重做最后一次提交,那么您将执行git reset --soft HEAD~。这会将当前分支移回一个提交但仅留下工作副本。我把它别名为redo

答案 1 :(得分:1)

如果您想从特定提交中检索文件,可以执行以下操作:

git checkout e811024 file/to/restore

这将检出从提交e811024

中选择的文件