有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
。