编码时我将print语句添加到某些文件中以跟踪发生的情况。
当我完成后,是否可以恢复某些文件中的更改,但提交我实际工作的文件?
假设我在文件A
中添加了打印,但我修改了文件B
。我想提交B
A
,我想恢复原状。
答案 0 :(得分:285)
有三种基本方法可以执行此操作,具体取决于您对文件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
答案 1 :(得分:19)
来源:http://git-scm.com/book/en/Git-Basics-Undoing-Things
git checkout - modifiedfile.java
1)$ git status
您将看到修改后的文件
2)$ git checkout - modifiedfile.java
3)$ git status
答案 2 :(得分:7)
git add B # Add it to the index
git reset A # Remove it from the index
git commit # Commit the index
答案 3 :(得分:6)
man git-checkout:git checkout A
答案 4 :(得分:3)
是;
git commit FILE
将只提交文件。然后你可以使用
git reset --hard
撤消其他文件中的本地更改。
我可能还有其他不了解的方法......
编辑:或者,正如NicDumZ所说,git-checkout只是要撤消更改的文件(最佳解决方案取决于是否有更多要提交的文件或要撤消更多文件: - )
答案 5 :(得分:1)
为什么不能简单地使用“git add &lt; file&gt; ”(或者甚至是“git add --interactive”)标记要提交的更改内容,或者“git gui”有交互式选择的选项),然后用“git commit”代替“git commit -a”?
在您的情况下(例如),它将是:
prompt> git add B
prompt> git commit
只会对文件B进行更改,文件A将保持“脏”状态,即工作区版本中的那些打印语句。如果要删除这些打印语句,则应该使用
prompt> git reset A
或
prompt> git checkout HEAD -- A
恢复到comded版本(来自HEAD的版本,即“git show HEAD:A”版本)。