如何强制git还原

问题描述 投票:0回答:3

我的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
3个回答
2
投票

恢复撤消提交;它不会回到某一点。

如果你仍然有一个干净的树在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

0
投票

除了两个

git revert b265eb43abd7704ed2560cca7c635dbd47b677b0
git revert 536d071bf99059ff8b519ae96ce6e97d92fbc7d7

你可以检查目标位置并提交它

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

0
投票

Git Revert Commit:撤消1提交:

$ git reset --hard HEAD~1

要么

$ git reset --hard COMMIT

删除上次提交:

$ git push -f

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

$ git reset --hard COMMIT
© www.soinside.com 2019 - 2024. All rights reserved.