如何将以前的版本恢复为GIT的新提交



首先,我以前在这里看到了这个问题的答案,但是它被这么多的"答案"掩埋,这些"答案"没有正确地回答我的问题,以至于我找不到它。

因此,它去了:我如何将git恢复到历史记录中的先前版本,以便成为我当前历史的新提交?

基本上,这是我想使用版本控制系统最基本的事情。简单地进行重置不起作用,因为它丢弃了我的历史记录,一个简单的还原也无法工作,因为有时它会给我错误消息(如果没有任何错误消息,我想做的事情应该是可能的(。

编辑:如果我只是做git revert,则会发生此错误:

git revert HEAD~1
error: could not revert f1b44e3... Towards translating API to kernel.
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'

简单地" checkout the Commit"。这将用历史记录中的仓库的指定快照(提交(覆盖您当前的工作目录,并使您可以按照自己的意愿进行和提交新的工作集。如果您之后立即commit,则您的存储库将具有与您执行checkout的提交相同的文件系统内容(假设您没有其他尚未上演或上演更改(

这将不是重写历史记录,也不会编辑或删除任何以前的提交 - 因此它的工作类似于MediaWiki上的"回滚":

cd ~/git/your-repo-root
git log
# find the commit id you want
git checkout <commitId> . 
# IMPORTANT NOTE: the trailing `.` in the previous line is important!
git commit -m "Restoring old source code"

另请参见:回滚旧的git订单在公共仓库中

关于.(dot(

.(dot(字符的意思是"当前目录" - 它不是git的任何特殊或独特的东西,它是在Windows,Linux,MacOS甚至MS-DOS上相同的标准命令行文件系统约定。它的工作类似于..的含义"父目录"。我建议阅读以下内容:

  • https://askubuntu.com/questions/54900/what-do-and-mean-when-when-in-in-a-folder
  • https://superuser.com/questions/37449/what-are-and-and-in-a-a-directory
  • Linux中的双点(..(和单点是什么?
  • https://unix.stackexchange.com/questions/118175/what-are-are-some-uses-of-single-period-double-double-period-period-in-the-shell-command

关于checkout

请注意:checkout是GIT中的一个过载命令 - 它可能意味着切换分支(LA svn switch(或从历史程序中获取特定的文件或提交并放入工作空间(LA svn update -r <id>(。这也可能意味着其他事情:https://git-scm.com/docs/git-checkout-我很感激它会让人们感到困惑,尤其是我自己使用TF多年后开始使用git(在其中"结帐"中,"签约"意味着其他一些东西完全(。

编辑:我看到您要保留历史记录,因此下面的答案被无效。但是,它仍然有用。您可以在编辑器中重新排序行,然后继续。

现在,回到原始答案。

您可以尝试rebase命令。

git rebase -i HEAD~n

n比当前和要恢复为当前的提交数量大约要多。假设,删除最后3个提交:

git rebase -i HEAD~4

一旦您在那里,它将在VIM或Nano(或其他编辑器(中打开。只需删除承诺删除的行,然后退出编辑器即可。

在VIM中,将是esc和类型:exit enter

现在,只需推动它。这将导致错误,所以推动力量。

git push -f

您可能也必须指定分支名称和上游。那应该做到!

此方法完全删除了糟糕的consits ,因此它不仅会随着恢复更改添加新提交。

这是文档:https://git-scm.com/docs/rebase

使用git还原https://git-scm.com/docs/git-revert

git revert HEAD~1

记下当前头的提交哈希

  1. git reset --hard <old-commit>
  2. git reset --soft <previous-HEAD>
  3. git add . && git commit -m "message"

完成!

最新更新