有select地恢复或签出对Git文件的更改?

有没有一个命令,允许您部分撤消对工作目录中的文件(或文件)的更改?

假设您已经编辑了很多文件,但是您意识到您想要将一些更改撤回到提交状态,而不是其他更改。

我设想一个git checkout的选项,它很像git add -p ,也就是说它通过hunk来检查文件,并询问是否要保留它。

你可以使用

 git add -p <path> 

然后,将要保留在特定文件中的块分级

 git checkout -- <path> 

通过检出文件的分阶段版本来放弃您不想保留的工作树更改。

最后,你可以使用

 git reset -- <path> 

将文件的分阶段版本恢复到文件的最新提交版本,以使您的更改不再进行。

与git版本> = 1.7.1我可以

 git checkout -p 

我不确定何时引入此function。

git checkout $file将文件$file的状态恢复到上次提交状态。 我认为你可以使用git checkout SHA-1 -- $file将文件恢复到由SHA-1标识的提交。

你需要多less次提交才能从中select? 如果只是一个,也许在它之前build立一个分支,检出你提交的文件,然后使用git add -p来添加你想要的文件。 然后你可以回到你所在的地方,并从你的临时分支结帐。

那是:

 git checkout -b temp troublesome-commit^ git checkout troublesome-commit -- path/to/file git add -p path/to/file git commit -c troublesome-commit git checkout @{-1} git checkout temp -- path/to/file git commit path/to/file git branch -D temp 

其他的select包括返回并编辑提交与git rebase -i (标记提交作为edit ,然后做一个git reset HEAD^并重新提交时,退回到壳)。

如果需要select的更改分布在一系列提交中,最好将它们作为补丁(或覆盖所有补丁的补丁)进行提取,然后手动编辑补丁,取出要保留的更改,并将残留进入git apply --reverse