Note

这是去年10月份左右做的一篇笔记,因为当时用Github Copilot用多了,导致代码乱乱的,所以想到使用分支功能来备份,于是就学了一下,做了一点笔记。

检查当前分支

1
git branch

此时我们会看到自己处于main或者master分支,之后按下q回到命令行。接下来的工作就是创建一个新的分支,用于储存你最新的更改。

创建新的分支

执行命令:

1
git branch <branch_name>

这样会创建一个新的名字为branch_name的分支。比如git branch copilot就会创建一个叫copilot的分支,此时你执行git branch就能看到新的分支,只不过*符号仍然指向你的原本的分支,表明你仍然处于旧的分支。

切换分支

使用命令:

1
git checkout <branch_name>

可以切换到你想要的另一个分支,执行后你使用git branch查看就可以发现*指向了你刚刚指定的分支,这就说明我们处于另一个分支了。

推送最新更改,完成备份

我们这时需要把你目前的状态保存到这个分支上。执行以下命令:

1
2
3
4
git add . # add all changes to staged status
git status # check if any file has yet to be staged
git commit -m "your commit message" # or use git commit -a -m "xxx" to mix add and commit commands together.
git push origin <new_branch_name>

只要你成功把更改推送到这个分支上,这个分支会一并将你之前本地的commit历史都记录在当前分支的提交记录里,正好像一条河流的河水,从某一刻起脱离了主流(你的main/master分支),成为了一条真正的支流,所以这个“branch”也是很形象了。

回滚原分支状态

现在我们需要把原分支恢复到你之前的某一次提交后的状态。这需要实现两点:

  • 将本地git的提交历史回滚到你想要的状态;
  • 将本地git的提交历史/流同步到你的远程仓库

我们分步来说这件事。

  1. 首先,切换回原先分支

    1
    git checkout master
  2. 查看日志,根据你的提交信息确定你需要回滚到哪一次提交。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    commit fabf996d953095f596a9ea63d9a648ab6709c8cc
    Author: ziyuliu258 <xxx@xxx.com>
    Date: Fri Oct 3 21:57:05 2025 +0800

    Read Part of xxx Codes

    commit 707fdf2874be1c9ea7eec483ac6346afc0076fc3
    Author: ziyuliu258 <xxx@xxx.com>
    Date: Mon Sep 29 11:14:40 2025 +0800

    add xxx score mechanism targeting xxx

    commit 4a6307f834bd7a026a227b5717ecdab5475b1499
    Author: ziyuliu258 <xxx@xxx.com>
    Date: Fri Sep 26 15:17:16 2025 +0800

    after running comparison with old model

    ......

    我们记住我们要回滚到的那个提交的commit ID

  3. 强制回滚

    1
    git reset --hard fabf996d953095f596a9ea63d9a648ab6709c8cc

    这样就能让你的本地git提交历史和文件状态都回到你指定的这个提交的位置。但是此时任务还没有完成,如果你没有把这个状态更新到远程仓库,那你仍然无法完成远程分支历史的更改。

  4. 本地回滚推送回远程原分支

    此时我们执行git push origin master -f将提交状态强行推送到原本的master分支上,其中-f就是强制(force)推送的意思。
    之后执行git status,就能看到你的本地状态和远程仓库的master分支一样了!