Git-版本回退

如题所述

Git版本管理的基本结构是版本控制的核心,其中git revert命令用于“反做”某一个版本,实现间接撤销修改的目的。这个操作不会删除repository中的原有版本,反而会增加一个新版本。例如,如果我们commit了三个版本(版本一、版本二、版本三),突然发现版本二存在问题(如:有bug),我们希望撤销版本二,但又不想影响版本三的提交,这时候可以使用git revert命令来反做版本二,生成新的版本四,这个版本四会保留版本三的内容,但撤销了版本二的内容。

如果revert操作前后的版本有修改到同一个地方,可能会触发冲突,需要手动解决。

git rebase命令用于完成变基操作,常用于对commit进行整理,如合并多个commit。常用的命令是git rebase -i [startpoint] [endpoint],用于交互式整理指定范围的commit。运行后会出现类似下面的界面,需要我们根据需求对其内容进行编辑:

上面未被注释的部分列出的是本次rebase操作包含的所有提交,下面注释部分是git为我们提供的命令说明。每一个commit id前面的pick表示指令类型,git为我们提供了以下几个命令:

编辑完成后,保存退出。然后根据选择的设置,可能会继续提示我们修改确定注释内容,编辑完注释后再次保存退出,然后commit即可。

git reset命令有三种模式,即--soft,--mixed(默认),--hard。

根据上述结构,Git版本回退可以分为四种,即1. 工作区的代码想撤销2. add到暂存区的代码想撤销3. 提交到本地仓库的代码想撤销4. 远程仓库的代码想撤销。

工作区的代码想撤销可以使用git checkout --命令撤销当前工作目录中指定文件的修改。

add到暂存区的代码想撤销可以使用git reset HEAD命令将已经add到暂存区的代码撤销到工作区,即add操作的逆操作。

提交到本地仓库的代码想撤销可以利用git reset --hard命令来实现版本回退,该命令中的版本号有几种不同的写法:

注意:此操作会直接将工作区,暂存区,回退区间版本的内容清空,并撤回到指定回退版本的状态。

本地撤销后,push到远程即可。可能会报错远程分支比当前本地分支超前,可以通过该-f参数强制push到远程。

有时候脑抽或者手欠,总是可能发生一些意外,特别是git reset --hard这个死亡操作,更是可能产生严重后果。如果发现git reset --hard误操作了,在某些情况下是可以还原的:(1)想还原被回退了的那些commits的内容,比较简单;(2)想还原被add但没有commit的内容,比较复杂;(3)想还原没有add的内容,别做梦了,基本不可能。

首先的首先,切记,还原操作之前,先把当前的内容做好备份!还原操作本身也是有“破坏性”的,别捡回西瓜,又丢了芝麻。

还原被回退了的那些commits:git reset --hard虽然会导致回退区间内的commits内容被删除,但是其实这些记录还是在的。如果想取消这次回退,可以先用git reflog查看所有commit历史(也包括被我们误回退了的那些commits),大概结果如下:

可以看到有两个HEAD->main开头的commits,其实就是我们名义上的当前版本和回退操作所回退到的版本(这俩其实是同一个版本),而这俩版本中间的commits就是被我们回退操作删除了的内容。如果我们希望撤销误回退操作,只需要找到这个操作之前的commit id(这里是5f117a5),执行git reset --hard 5f117a5就行了(注意:撤销回退也是通过git reset --hard命令实现的,所以执行之前务必先保存好当前还需要的内容,别又被撤销回退的操作给冲掉了,无限套娃)。

还原add但没有commit的内容:这个复原比较麻烦,但是是有可能的。主要用到的命令是git fsck --lost-found,运行后,可以在本地项目文件中路径为.git/lost-found/other的地方,找到所有的没有add但没有commit的文件,甚至可能还包括你每次git add的版本。

但是!它们的文件名不再是原来的名字,而是变成了一长串id号码,连扩展名都没了,需要自己分辨到底谁是谁。分辨时有一些技巧,比如用find .git/objects -type f | xargs ls -lt | sed 60q查看最近修改的记录是哪些(参数60代表最近的60个add过的文件)。然后把这些记录复制出来(别再搞丢了,那就没了),然后用txt打开,如果是文本类型的文件(代码之类的),内容会正常显示;如果是图片,docx等内容,显示的是二进制内容,这时候尝试把文件扩展名改成png,docx之类的,用对应软件打开,如果能打开就对了,具体名字叫啥自己慢慢回忆吧。
温馨提示:内容为网友见解,仅供参考
无其他回答

Git-版本回退
还原被回退了的那些commits:git reset --hard虽然会导致回退区间内的commits内容被删除,但是其实这些记录还是在的。如果想取消这次回退,可以先用git reflog查看所有commit历史(也包括被我们误回退了的那些commits),大概结果如下:可以看到有两个HEAD->main开头的commits,其实就是我们名义上的当前版本和...

git版本回退与恢复
回退版本的步骤如下:1. 首先,确保当前代码状态未与暂存区和仓库产生冲突。如果有改动,请执行`git add`和`git commit`操作。2. 查阅提交日志,找到要恢复的版本的commit ID。例如,76eac54是目标commit ID。3. 保存当前的开发工作,并再次查看提交日志。确保记录了最近的提交内容。4. 使用`git che...

如何使用git命令进行版本回退
使用git命令进行版本回退,可以通过以下步骤实现:1. 查看历史记录:首先,你需要查看提交的历史记录,以确定要回退到哪个版本。可以使用`git log`命令查看提交日志,它会显示每个提交的哈希值、提交信息等内容。2. 选择要回退的版本:根据`git log`的输出,找到你想要回退到的提交的哈希值或描述信息。3....

Git版本回退之没有push到远端只是在本地commit,跳转到某个本地的commi...
方法一:使用git reset --hard 直接指定你想回退到的提交的哈希值,例如:`git reset --hard db0d2eb6`。注意,哈希值无需加引号,错误用法如:`git reset --hard 'db0d2eb6'`。通过执行`git log -g`查看历史记录,你可以轻松地通过哈希值在提交之间切换。方法二:git checkout 另一种方法...

如何使用git命令进行版本回退
在终端或命令提示符中,输入`git reset --hard`,这将把你的工作目录和索引恢复到前一个提交的状态。如果你想要回退到更早的版本,可以使用`git reset --hard HEAD^`,这里的`HEAD^`表示前一个提交。这种方式更为灵活,适合那些对Git命令有一定了解的用户。无论你选择哪种方式,记住版本回退是一项...

Git基本操作—版本回退
版本回退是Git的标志性功能之一,让我们可以轻松地在历史版本中穿梭。让我们来一起操作一下,实现“穿越”吧。首先,我们进行文件的修改与提交。创建一个文件,命名为hjftest.txt,并提交。接着,再次修改文件并提交,现在已有两个版本。要实现版本间的跳跃,我们查看日志以了解当前状态。此时,我们想要...

Git使用之版本回退
具体操作步骤如下:在VSCode或其他Git集成环境中,找到显示提交历史的界面,通常会显示每个提交的哈希ID以及相关描述。点击那个需要回退的提交,系统会提示你进行回滚操作,将代码库的状态调整至那个指定的提交状态。总的来说,熟练掌握Git的版本回退功能,可以大大提高开发效率,避免因误操作或问题导致的不必要...

git如何回退到某个版本?
使用Git回退到某个版本可以通过以下步骤实现:1. 查看历史版本记录。2. 使用`git checkout`命令切换到想要回退到的版本。3. 如果需要的话,可以使用`git reset`命令进一步确认回退操作。详细解释:查看历史版本记录 在进行版本回退之前,首先要确定要回退到的具体版本。可以使用`git log`命令查看项目的...

Git 之 版本回退
在Git的版本管理中,有时我们需要回退到之前的某个版本。首先,使用命令`git log --pretty=oneline`可以帮助我们查看历史提交记录,简洁明了。如果想要直接回退到特定的commit,可以输入`git reset --hard commit_id`,其中commit_id是你要回退到的版本的标识。然而,有时候可能会误操作,担心代码消失。

git reset等撤销修改和版本回退的问题
总结,Git版本回退通过调整HEAD指针实现。使用 git reset --hard commit_id 可回退至特定版本。查看提交历史(git log)以确定目标版本,使用 git reflog 查找撤销历史。HEAD指针指向当前版本,允许穿梭于版本历史之间。使用 git reset --soft、git reset --mixed 或 git reset --hard 恢复至不同版本...

相似回答
大家正在搜