如何在以前的提交中将更改还原为1个文件

时间:2016-02-08 20:56:34

标签: git sourcetree

最好使用SourceTree或简单的git命令,如何在之前的提交中撤消对1文件的更改。换句话说,如何反转提交,但仅限于提交的许多文件中的1个?

希望避免必须撤消整个提交,然后重新发送除1文件之外的所有更改。

修改 我最后只是通过编辑手动“恢复”1文件。但是得到了两个好看的答案,我会选择一个似乎在更多情况下起作用的答案。

3 个答案:

答案 0 :(得分:3)

如果您要撤消最新的提交但尚未推送,则可以发出以下命令:

git checkout HEAD^ -- <file_path>  # revert and stage the problematic file
git commit --amend                 # edit the latest commmit

答案 1 :(得分:2)

执行:

git revert <commit> --no-commit     #reverts the whole commit, putting changes in index and working dir
git reset HEAD .                    #clears index of changes
git add <fileyouwanttorevert>       #adds changes to that one file to index
git commit -m "Reverting the file"  #commits that one file's changes
git checkout .                      #gets rid of all the changes in working directory

答案 2 :(得分:0)

要在任意提交中将更改还原为文件,

git revert $thecommit              # revert the whole commit
git reset --hard @{1}              # in what turns out to have been a throwaway commit
git checkout @{1} $thatfile        # take what you want

但如果不需要的更改在最近的提交中,您可以直接使用

查看未更改的版本
git checkout @^ $thatfile          # restore mainline-parent content