【问题标题】:How to force a git revert如何强制 git revert
【发布时间】:2018-02-25 15:56:58
【问题描述】:

我的 git 日志如下所示:

commit b265eb43abd7704ed2560cca7c635dbd47b677b0
Date:   Sun Feb 25 10:20:58 2018 -0500

    added C3

commit 536d071bf99059ff8b519ae96ce6e97d92fbc7d7
Date:   Sat Feb 24 20:50:15 2018 -0500

    added B2

commit 6e46e4ff4135b4df55866a5df9af963e3d6ff218
Date:   Sat Feb 24 11:07:58 2018 -0500

    added a

commit 93ad202a08660a62f76496d728a3a89d727350a9
Date:   Sat Feb 24 11:05:56 2018 -0500

    first commit

我想撤消我之前的提交并返回提交 6e46e4ff4135b4df55866a5df9af963e3d6ff218。但是,我想保留历史记录,不想从 git 日志中删除“添加的 C3”和“添加的 B2”,以便排除 git reset --hard 6e46e4ff4135b4df55866a5df9af963e3d6ff218。

我在网上做了一些阅读,人们说完美的工具是“git revert”。我尝试“git revert 6e46e4ff4135b4df55866a5df9af963e3d6ff218”并看到以下内容

error: could not revert 6e46e4f... added a
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

我打开了我要还原的文件并看到以下内容:

Test
<<<<<<< HEAD

adding A
adding B
adding C
=======
>>>>>>> parent of 6e46e4f... added a

有人告诉我这意味着我有“合并冲突”。但我不想将项目的当前状态与项目的旧状态合并 - 我想用项目的旧状态替换项目的当前状态。

有没有什么方法可以简单地用旧的提交替换项目的当前状态,并让它成为新的提交?我可以通过以下方式手动执行此操作:1) git checkout ,2)将签出的项目复制到备份目录,3)在主文件夹中执行 git checkout master ,3)删除主文件夹中的所有文件,用备份替换它们旧的提交。但我更愿意学习如何以 git 方式进行操作。我还希望避免使用分支解决方案,因为我想学习使用“git revert”——如果它不能用于这个非常基本、直接、规范的示例,它可能用于什么?

【问题讨论】:

  • 为什么不删除冲突,提交然后还原?

标签: git


【解决方案1】:

Git 还原提交: 撤消 1 次提交:

$ git reset --hard HEAD~1

$ git reset --hard COMMIT

删除最后一次提交:

$ git push -f

这将破坏任何本地修改。 如果您有未提交的工作想要保留,请不要这样做。

$ git reset --hard COMMIT

【讨论】:

  • git reset --hard 足以应付答案
【解决方案2】:

revert 撤消提交;它不会回到某个点。

如果你还有一棵干净的树在b265eb4,就这样吧: (我的意思是你可能想git reset --hard b265eb4 在你开始回到你尝试恢复之前的位置之前)

git revert b265eb4
git revert 536d071

然后检查它是否像这样工作

git diff 6e46e4f

您的文件应该与该提交中的文件相同,但有错误,然后在历史记录中恢复

.... 或者如果您想在一次提交中撤消两个错误提交...

git reset --hard 6e46e4f # to make the files how you want them
git reset b265eb4 # to get back to the last commit
git diff # should see local changes that undo everything in the last two commits
git add -A
git commit -m"undo last couple commits"
git diff 6e46e4f # the state of the files should be the commit you wanted to go back to

【讨论】:

    【解决方案3】:

    另外两个

    git revert b265eb43abd7704ed2560cca7c635dbd47b677b0
    git revert 536d071bf99059ff8b519ae96ce6e97d92fbc7d7
    

    你可以签出目标位置并提交

    git checkout 6e46e4ff4135b4df55866a5df9af963e3d6ff218 -- .
    git commit -m 'reverted some stuff'
    

    【讨论】:

      猜你喜欢
      • 2015-09-02
      • 2011-07-21
      • 1970-01-01
      • 2020-12-31
      • 2016-12-31
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多