请大佬指点:
分支情况如下图:

从 1 创建新的 test 分支
在 test 分支上分别进行了 2 3 提交
merge test to release 的时候产生了 4提交
删除了 test 分支

我现在想回退到 2来删除 3 4记录,是否能做到?如果可以的话,应该在哪个分支执行什么 git 命令。

AI 让我执行了 git reflog expire --expire-unreachable=now --expire=now --all,现在git reflog 被清空了,这个问题算是 “解决了”😂

git reflog 查看记录

git reset 重置当前状态

去看 git rebase 的文档

git reset --hard 2 的 commit id

这种问题可以直接问 AI

AI 大概会问你你到底想干什么

#2
git rebase 可以把 release 上从 4 回退到 1 ,但是由于我删除了 test 分支,所以不知道怎么删除 3

前提:只有你一个人,或者,你可以说动协作开发的其他成员进行强制拉取。

首先,请保持工作区干净
即:
git status提示当前无修改

步骤一
向前软重置一步。重复执行,直到退到记录 1
git reset --soft HEAD^1
或者是直接一步到位退到记录 1
git reset --soft ${记录 1 的 commit id}

步骤二
提交当前工作区
git commit ${可以填写记录 2 的提交信息,也可以顺带标注一下回退原因}

步骤三
强制 push ,覆盖远端
git push --force

步骤四
如果有协作开发的同学,揖让让他们拉一下新的远端再接着开发。

这个前提只针对 test 分支。也就是如果只有你一个人在 test 分支,就无所谓。

#4
问了 claude
I have a git branch named release`.
I create a new branch test from commit1, then create commit2 and commit3.
Then back to release, merge test to release with a new commit4.
Then deleted the test branch.

Now I wanna :

  1. remove the commit3 and commit4 records
  2. check out new branch on commit2 to prepare merge
  3. reset branch release to commit1
    think harder
  4. show which branch is when running git commands`
    但是它给的答案达不到我想要的效果

    #7
    这个 test 是我本地分支没有提交过远端,而且我本地也已经删除了这个分支。这是我麻烦的点。

    git rebase -i 1 的 commit id
    然后 git 会打开一个编辑器,含有 2 和 3 的 commit
    把 3 所在的行的 pick 改为 drop ,保存退出
    ( rebase 不会保留 merge 记录,所以顺带删除了 4 )

    先到 4 然后软重置到 2 ,接着 commit 后 force push

    rebase 来合并提交然后强推

    1 楼正解

    只要 commit id 还在,reset --hard 基本万能的

    #5 先 reset release 分支,然后从 2 的 commit id 切出来一条新分支...
    剩下的就是看你需求了,在 release 分支执行 merge test / merge test -no-ff

    如果是删除,git reset --hard

    git merge --squash ,会将分支中的所有 commit 组合为一个然后合并

    -f

    本地删除了分支也没事,用 git reflog 能看到过往历史,找到 test 分支的过往 commit hash 后,再用 git reset 之类的修改提交就好了

    新建分支
    cherry-pick 2
    合并