
请大佬指点:
分支情况如下图:
1 创建新的 test 分支test 分支上分别进行了 2 3 提交4提交test 分支我现在想回退到 2来删除 3 4记录,是否能做到?如果可以的话,应该在哪个分支执行什么 git 命令。

AI 让我执行了 git reflog expire --expire-unreachable=now --expire=now --all,现在git reflog 被清空了,这个问题算是 “解决了”
1 baiyi 85 天前 git reflog 查看记录 git reset 重置当前状态 |
2 avenger 85 天前 去看 git rebase 的文档 |
3 I2E 85 天前 git reset --hard 2 的 commit id |
4 cc666 85 天前 这种问题可以直接问 AI AI 大概会问你你到底想干什么 |
6 yaocf 85 天前 前提:只有你一个人,或者,你可以说动协作开发的其他成员进行强制拉取。 首先,请保持工作区干净 即: `git status`提示当前无修改 步骤一 向前软重置一步。重复执行,直到退到记录 1 git reset --soft HEAD^1 或者是直接一步到位退到记录 1 git reset --soft ${记录 1 的 commit id} 步骤二 提交当前工作区 git commit ${可以填写记录 2 的提交信息,也可以顺带标注一下回退原因} 步骤三 强制 push ,覆盖远端 git push --force 步骤四 如果有协作开发的同学,揖让让他们拉一下新的远端再接着开发。 |
8 rrubick OP @cc666 #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` 但是它给的答案达不到我想要的效果 |
10 LGA1150 85 天前 git rebase -i 1 的 commit id 然后 git 会打开一个编辑器,含有 2 和 3 的 commit 把 3 所在的行的 pick 改为 drop ,保存退出 ( rebase 不会保留 merge 记录,所以顺带删除了 4 ) |
11 Ipsum 85 天前 via Android 先到 4 然后软重置到 2 ,接着 commit 后 force push |
12 benjen000 85 天前 via Android rebase 来合并提交然后强推 |
13 hwdq0012 85 天前 1 楼正解 |
14 choah 85 天前 只要 commit id 还在,reset --hard 基本万能的 |
15 wenrouxiaozhu 85 天前 @magic3584 #5 先 reset release 分支,然后从 2 的 commit id 切出来一条新分支... 剩下的就是看你需求了,在 release 分支执行 merge test / merge test -no-ff |
16 Rickkkkkkk 85 天前 如果是删除,git reset --hard |
17 jayasme 85 天前 git merge --squash ,会将分支中的所有 commit 组合为一个然后合并 |
18 icanfork 85 天前 -f |
19 857681664 85 天前 @magic3584 本地删除了分支也没事,用 git reflog 能看到过往历史,找到 test 分支的过往 commit hash 后,再用 git reset 之类的修改提交就好了 |
20 SethShi 85 天前 新建分支 cherry-pick 2 合并 |
21 realJamespond 84 天前 reset 1 -> cherry pick 2 |
22 vegetableChick 84 天前 cherry-pick |
23 shily 84 天前 #8 假设 OP 想移除 3 、4 号提交,并重新建立 release 分支。 1.1 git tag tag-1 1 号提交的 hash 1.2 git tag tag-2 2 号提交的 hash 2. git branch --D release # 强制删除分支 3. git checkout tag-1 -b release # 使用 1 号提交的 hash 重新拉出 release 4. git merge tag-2 # merge 2 号提交到 release 分支 |
24 sampeng 84 天前 开发群里大喊一声: “所有人别提交代码。我要变身了”。 然后修复本地的代码树,push 。再大喊一声:"变身完毕,都拉一下吧" |
25 lonenol 84 天前 从 4 新拉一个分支 A ,A 分支上回退到 2 release 分支回退到 1 ,git push -f 这样远程和本地都到了 1 , 然后把 A 分支 merge 到 release 分支 ,push 到远程 注意一下这个操作需要让同事把本地分支 reset 到 1 ,然后重新拉下远程分支。 |