在我看来,之前的回答都不够清晰明了。我想要补充一下我的解释,这段操作非常容易。
首先,假设我有一个提交记录 abc1
,而后我对文件 file.txt
进行了几次修改(或只进行了一次修改)。
现在,如果我发现在文件 file.txt
中出了些问题,想回到之前的提交记录 abc1
。
1. git checkout file.txt
:这个操作将撤销本地的所有更改,如果您不需要它们的话。
2. git checkout abc1 file.txt
:这个操作将把您的文件还原到您所需的版本。
3. git commit -m "Restored file.txt to version abc1"
:这个操作将提交您的还原操作。
git push
:这个操作将把所有内容推送到远程仓库。当然,在步骤 2 和 3 之间,您可以运行 git status
命令来了解正在发生的事情。通常情况下,您应该会看到 file.txt
的状态已经被标记为添加状态,这就是为什么不需要运行 git add
命令的原因。
git log --oneline // you see commits, find commit hash to which you want reset
git diff y0urhash src/main/.../../YourFile.java // to see difference
git reset y0urhash src/main/.../../YourFile.java // revert to y0urhash commit
git status // check files to commit
git commit -m "your commit message"
git push origin
Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes
- john k这里有许多答案声称使用 git reset ... <file>
或 git checkout ... <file>
,但是这样做会使您失去在您想要还原的提交之后提交的 <file>
上的所有修改。
如果您只想针对单个文件还原一个提交中的更改,就像 git revert
只针对一个文件(或一组提交文件)所做的一样,我建议使用 git diff
和 git apply
,像这样操作(其中 <sha>
= 您想要还原的提交哈希):
git diff <sha>^ <sha> path/to/file.ext | git apply -R
基本上,它将首先生成与您想要还原的更改对应的补丁,然后将补丁反向应用以删除这些更改。
当然,如果在 <sha1>
和 HEAD
之间的任何提交中修改了被还原的行,则它将无法工作(冲突)。
git show -p <sha> path/to/file.ext|git apply -R
- Amaury D<sha>^!
代替 <sha>^ <sha>
。 - cambunctiousgit checkout eb917a1 YourFileName
如果您只需要回到最近一次提交的版本
git reset HEAD YourFileName
git checkout YourFileName
这将简单地将您带到文件的最后一个提交状态
git checkout ref|commitHash -- filePath
例如:
git checkout HEAD~5 -- foo.bar
or
git checkout 048ee28 -- foo.bar
这是一个非常简单的步骤。检出我们想要的提交ID的文件,这里是前一个提交ID,然后只需使用git commit --amend,我们就完成了。
# git checkout <previous commit_id> <file_name>
# git commit --amend
这非常方便。如果我们想将任何文件带到先前提交ID的顶部,我们可以轻松地实现。
你可以通过以下4个步骤实现:
您需要在终端中输入以下命令:
git revert <commit_hash>
git reset HEAD~1
git add <file_i_want_to_revert>
&& git commit -m 'reverting file'
git checkout .
祝你好运!
git-revert
只对整个仓库进行操作,因此为了补偿,我们必须撤消其他所有操作。 - Timothygit revert --no-commit <commit_hash>
git reset HEAD
这样可以避免多余的提交,并且只在您的工作目录中进行所有更改。git revert _oldcommit_ --no-commit
git reset -- _unchanged1_ _unchanged2_ ...
git commit -m "branch without changes to specific files"
新分支的末端反映了除还原文件之外的所有更改。 - Suncat2000使用 git log
命令获取特定版本的哈希值,然后使用 git checkout <hashkey>
命令进行切换。
注意:不要忘记在最后一个哈希值之前输入哈希值。最后一个哈希值指向当前位置(HEAD),不会造成任何更改。
cd <working copy>
git revert master
git diff
时不要忘记加上--cached
参数。 - Geoffrey Hale