Git代码回滚

一、简介

存储

主要包括四个区域:工作区(working directory)、暂存区(staging area)、本地仓库(local repository)和远程仓库(remote repository)。

流程

  1. 在工作区(working directory)中编写和修改代码;

  2. 首先通过 git add 命令将修改添加到暂存区(staging area);

  3. 其次使用 git commit 命令将暂存区的修改提交到本地仓库(local repository);

  4. 最后执行 git push 命令将本地仓库的提交推送到远程仓库(remote repository)。

二、撤销提交到本地仓库的代码

命令

撤销最近一次提交的代码

git reset --soft HEAD~1

注: HEAD~n 数字 “ n “ 表示连续撤销的次数;

说明

--soft

仅重置本地仓库,保留工作区和暂存区的更改,撤销commit,不撤销git add(回滚到暂存区)

--mixed

(默认参数):重置本地仓库和暂存区,但保留工作区的更改。撤销commit,撤销git add(回滚到工作区)

--hard

重置本地仓库、暂存区和工作区,所有提交的更改都会丢失。(改动的代码会被删除)

三、撤销提交到远程仓库的代码

1. 查看日志

git log 
说明
  • git log (可以查看git仓库的所有提交详细记录)
  • git log --pretty=oneline (只显示版本号和备注)
  • git reflog (可以查看到已经被删除的commit记录和reset的操作)

2. 复制提交的ID

commit 1dbb482746ac062340a1be23ee88cd58f01b4160
Author: Jayknoxqu<jayknoxqu@gmail.com>
Date:   Tue Jan 14 16:43:07 2025 +0800

     fix: BUG:修复空指针异常

复制commit后面的ID1dbb482746ac062340a1be23ee88cd58f01b4160

3. 撤销到指定的版本

git reset --soft 1dbb482746ac062340a1be23ee88cd58f01b4160

4.强制推送到远程仓库

git push --force <origin 分支名>

四、命令reset和revert的区别

1、无回滚记录
git reset [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit_id>]

2、生成一个新的提交记录 | 安全
git revert <commit-hash| HEAD>

revert : 只撤销某一次提交,但不影响之后的提交

五、修改已提交的commit注释

修改最后一次提交的注解,但未提交到远程仓库

git commit --amend

此时会进入默认vim编辑器,输入 i 进入编辑模式,然后修改注解,按ESC推出编辑,最后输入 :wq 保存并退出

如果是已经提交到远程仓库则需要强制推送

git push --force <origin 分支名>

六、移植其他分支的代码

简介

git cherry-pick命令可以从一个(A)分支的提交历史中挑选出特定的(commit)提交,并将其应用到当前(B)分支,从而实现功能或补丁的移植。

操作

首先复制(A)分支提交的哈希值。然后切换到(B)分支,运行 git cherry-pick <commit-hash> 命令。如果你想要复制多个提交,可以多次运行该命令,或者指定一个提交范围( git cherry-pick <start-commit-hash> .. <end-commit-hash> )。

  • 注: <start-commit-hash>不包含该提交,<end-commit-hash>包含该提交。

冲突

解决冲突后,需要使用git add标记冲突已解决,并使用git cherry-pick --continue继续迁移操作。

终止

如果在解决冲突过程中,我们想终止并撤销迁移,可以执行 git cherry-pick --abort 来取消操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容