Git撤消某些文件中的更改

Git撤消某些文件中的更改,git,file,version-control,undo,revert,Git,File,Version Control,Undo,Revert,在编写代码时,我将打印语句添加到一些文件中,以跟踪正在发生的事情 完成后,是否可以恢复某些文件中的更改,但提交我实际处理的文件 假设我在文件A中添加了打印,但我修改了文件BB是我想要提交的,而A,我想要回到它原来的状态。:git签出A是 git commit FILE 将只提交文件。然后你可以用 git reset --hard 撤消其他文件中的本地更改 也许还有其他我不知道的方法 编辑:或者,正如NicDumZ所说,git只签出要撤消更改的文件(最佳解决方案取决于是否有更多文件要提交或有更

在编写代码时,我将打印语句添加到一些文件中,以跟踪正在发生的事情

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

假设我在文件
A
中添加了打印,但我修改了文件
B
B
是我想要提交的,而
A
,我想要回到它原来的状态。

git签出A

git commit FILE
将只提交文件。然后你可以用

git reset --hard
撤消其他文件中的本地更改

也许还有其他我不知道的方法


编辑:或者,正如NicDumZ所说,git只签出要撤消更改的文件(最佳解决方案取决于是否有更多文件要提交或有更多文件要撤消:-)

根据您对文件A的更改所做的操作,有三种基本方法。如果您尚未将更改添加到索引或提交,则只需使用checkout命令-这将更改工作副本的状态以匹配存储库:

git checkout A
如果已将其添加到索引中,请使用重置:

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
#-n意味着还不提交恢复
git-n
#现在,请确保我们只是将恢复提交到
吉特重置B
git提交
另一方面,如果您已经提交了它,但是提交涉及到很多您不想恢复的文件,那么上面的方法可能涉及很多“reset 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
#恢复,但尚未提交
git-n
#清除索引中的所有更改
git重置
#现在只需添加一个
git添加一个
git提交
同样,另一种方法需要使用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
#使用rebase-i选择要编辑的提交
#在要编辑的提交之前指定提交的sha1
#你会得到一个编辑器,里面有一个文件和一堆以“pick”开头的行
#将要编辑的文件更改为“编辑”,然后保存文件
git-rebase-i
#现在您进入了一个循环,对于设置为“编辑”的每个提交,您基本上可以从头开始重做该提交
#假设我们只是选择了一个有错误A提交的提交
git重置A
修改最后一次提交
#回到循环的开始
git rebase--继续吗

为什么您不能简单地使用“”(甚至是“git add--interactive”或“git gui”(具有交互式comitting选项)标记您希望在提交中进行的更改,然后使用“git commit”而不是“git commit-a”

在您的情况下(以您为例),可能是:

prompt> git add B
prompt> git commit
仅提交对文件B的更改,而文件A将保留为“脏”,即与工作区版本中的打印语句一起。当您想要删除那些打印语句时,就可以使用它了

prompt> git reset A

恢复到Comited版本(来自HEAD的版本,即“git show HEAD:A”版本)。

来源:

git签出——modifiedfile.java


1) $git状态

您将看到修改后的文件

2) $git checkout--modifiedfile.java


3) $git status

注意:恢复确实会恢复所有提交,因此这可能意味着大量的“重置B”,不是吗?见最后的评论。(如中所述,“负合并”可能更准确)。是的,如果在提交过程中有很多文件被修改,而您不想恢复,那么需要另一种方法,我将对其进行编辑,以建议一个“git重置a”相当于“git签出头a”.在GitGUI中是否有一个快速而简单的单击,可以将文件还原为存储库中的文件?使用Git bash成功了。。。但是如果我可以点击它,那会更快:-)谢谢你,你刚刚救了我的命!.RTFM的副本不是一个好答案。git签出A将导致错误git签出--modifiedfile.java是一个很好的提示。谢谢
git签出
完成了任务,谢谢!
prompt> git reset A
prompt> git checkout HEAD -- A