Git撤消一些文件中的更改

在编码时,我将打印语句添加到一些文件中以跟踪发生了什么。

当我完成时,是否可以恢复某些文件中的更改,但提交实际上处理的文件?

说我在文件A添加了打印,但我修改了文件B B是我想要承诺的, A ,我想回到原来的状态。

有三种基本的方法可以做到这一点,这取决于你对文件A的修改所做的事情。如果你还没有将修改添加到索引或提交它们,那么你只是想使用checkout命令 – 这将会改变工作副本的状态与存储库匹配:

 git checkout A 

如果您已将其添加到索引,请使用reset:

 git reset A 

如果你已经犯了,那么你使用revert命令:

 # the -n means, do not commit the revert yet git revert -n <sha1> # now make sure we are just going to commit the revert to A git reset B git commit 

另一方面,如果你犯了这个错误,但是这个提交涉及到很多你不想恢复的文件,那么上面的方法可能会涉及到很多“重置B”命令。 在这种情况下,您可能会喜欢使用此方法:

 # revert, but do not commit yet git revert -n <sha1> # clean all the changes from the index git reset # now just add A git add A git commit 

另一种方法,需要使用rebase -i命令。 如果您有多个提交进行编辑,这个可能很有用:

 # use rebase -i to cherry pick the commit you want to edit # specify the sha1 of the commit before the one you want to edit # you get an editor with a file and a bunch of lines starting with "pick" # change the one(s) you want to edit to "edit" and then save the file git rebase -i <sha1> # now you enter a loop, for each commit you set as "edit", you get to basically redo that commit from scratch # assume we just picked the one commit with the erroneous A commit git reset A git commit --amend # go back to the start of the loop git rebase --continue 

资料来源: http : //git-scm.com/book/en/Git-Basics-Undoing-Things

git checkout – modifiedfile.java


1)$ git status

你会看到修改的文件

2)$ git checkout – modifiedfile.java

3)$ git状态

man git-checkout : git checkout A

 git add B # Add it to the index git reset A # Remove it from the index git commit # Commit the index 

是;

 git commit FILE 

只会提交文件。 那么你可以使用

 git reset --hard 

撤销其他文件的本地更改。

还有其他的方式,我不知道…

编辑:或者,正如NicDumZ所说的那样,git-checkout仅仅是你想撤销的文件的更改(最好的解决scheme取决于更多的文件提交或更多的文件撤消:-)

为什么你不能简单地使用“ git add <file> ”(或者甚至是“git add –interactive”或者“git gui”)来标记你想在commit中进行什么样的改变,使用“git commit”而不是“git commit -a”?

在你的情况下(例如),将是:

 prompt> git add B prompt> git commit 

只有对文件B的更改将被排除,并且文件A将被保留为“脏”,即在工作区版本中使用这些打印语句。 当你想删除这些打印语句,就足够了

 prompt> git reset A 

要么

 prompt> git checkout HEAD -- A 

恢复到合成版本(HEAD版本,即“git show HEAD:A”版本)。