请大佬指点:
分支情况如下图:
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 40 天前 git reflog 查看记录 git reset 重置当前状态 |
![]() | 2 avenger 40 天前 去看 git rebase 的文档 |
![]() | 3 I2E 40 天前 git reset --hard 2 的 commit id |
4 cc666 40 天前 这种问题可以直接问 AI AI 大概会问你你到底想干什么 |
![]() | 6 yaocf 40 天前 前提:只有你一个人,或者,你可以说动协作开发的其他成员进行强制拉取。 首先,请保持工作区干净 即: `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 40 天前 ![]() git rebase -i 1 的 commit id 然后 git 会打开一个编辑器,含有 2 和 3 的 commit 把 3 所在的行的 pick 改为 drop ,保存退出 ( rebase 不会保留 merge 记录,所以顺带删除了 4 ) |
![]() | 11 Ipsum 40 天前 via Android 先到 4 然后软重置到 2 ,接着 commit 后 force push |
12 benjen000 40 天前 via Android rebase 来合并提交然后强推 |
13 hwdq0012 40 天前 1 楼正解 |
14 choah 40 天前 只要 commit id 还在,reset --hard 基本万能的 |
15 wenrouxiaozhu 40 天前 @magic3584 #5 先 reset release 分支,然后从 2 的 commit id 切出来一条新分支... 剩下的就是看你需求了,在 release 分支执行 merge test / merge test -no-ff |
16 Rickkkkkkk 40 天前 如果是删除,git reset --hard |
17 jayasme 40 天前 git merge --squash ,会将分支中的所有 commit 组合为一个然后合并 |
![]() | 18 icanfork 40 天前 -f |
![]() | 19 857681664 40 天前 @magic3584 本地删除了分支也没事,用 git reflog 能看到过往历史,找到 test 分支的过往 commit hash 后,再用 git reset 之类的修改提交就好了 |
![]() | 20 SethShi 40 天前 新建分支 cherry-pick 2 合并 |
21 realJamespond 40 天前 reset 1 -> cherry pick 2 |
![]() | 22 vegetableChick 40 天前 cherry-pick |
![]() | 23 shily 40 天前 #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 40 天前 ![]() 开发群里大喊一声: “所有人别提交代码。我要变身了”。 然后修复本地的代码树,push 。再大喊一声:"变身完毕,都拉一下吧" |
![]() | 25 lonenol 39 天前 从 4 新拉一个分支 A ,A 分支上回退到 2 release 分支回退到 1 ,git push -f 这样远程和本地都到了 1 , 然后把 A 分支 merge 到 release 分支 ,push 到远程 注意一下这个操作需要让同事把本地分支 reset 到 1 ,然后重新拉下远程分支。 |