这是我的最佳提交历史:
5e1aaf7 final commit message
0356c0a add Toyota to Cars.txt
5498f0f add some cities to Cities.txt
e811024 add Cities.txt
我需要从这些提交到索引进行更改,并使用一个或多个提交提交它们。
答案 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