V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
magic3584
V2EX  ›  git

请教 git 里怎么删除记录

  •  
  •   magic3584 · 19 小时 41 分钟前 · 2847 次点击

    请大佬指点:

    分支情况如下图:

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

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

    第 1 条附言  ·  16 小时 43 分钟前

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

    24 条回复    2025-09-01 15:44:20 +08:00
    baiyi
        1
    baiyi  
       19 小时 38 分钟前
    git reflog 查看记录

    git reset 重置当前状态
    avenger
        2
    avenger  
       19 小时 38 分钟前
    去看 git rebase 的文档
    I2E
        3
    I2E  
       19 小时 34 分钟前
    git reset --hard 2 的 commit id
    cc666
        4
    cc666  
       19 小时 34 分钟前
    这种问题可以直接问 AI

    AI 大概会问你你到底想干什么
    magic3584
        5
    magic3584  
    OP
       19 小时 33 分钟前
    @avenger #2
    git rebase 可以把 release 上从 4 回退到 1 ,但是由于我删除了 test 分支,所以不知道怎么删除 3
    yaocf
        6
    yaocf  
       19 小时 33 分钟前
    前提:只有你一个人,或者,你可以说动协作开发的其他成员进行强制拉取。

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

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

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

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

    步骤四
    如果有协作开发的同学,揖让让他们拉一下新的远端再接着开发。
    yaocf
        7
    yaocf  
       19 小时 31 分钟前
    @yaocf 这个前提只针对 test 分支。也就是如果只有你一个人在 test 分支,就无所谓。
    magic3584
        8
    magic3584  
    OP
       19 小时 31 分钟前
    @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`
    但是它给的答案达不到我想要的效果
    magic3584
        9
    magic3584  
    OP
       19 小时 29 分钟前
    @yaocf #7
    这个 test 是我本地分支没有提交过远端,而且我本地也已经删除了这个分支。这是我麻烦的点。
    LGA1150
        10
    LGA1150  
       19 小时 26 分钟前   ❤️ 1
    git rebase -i 1 的 commit id
    然后 git 会打开一个编辑器,含有 2 和 3 的 commit
    把 3 所在的行的 pick 改为 drop ,保存退出
    ( rebase 不会保留 merge 记录,所以顺带删除了 4 )
    Ipsum
        11
    Ipsum  
       18 小时 55 分钟前 via Android
    先到 4 然后软重置到 2 ,接着 commit 后 force push
    benjen000
        12
    benjen000  
       18 小时 38 分钟前 via Android
    rebase 来合并提交然后强推
    hwdq0012
        13
    hwdq0012  
       18 小时 37 分钟前
    1 楼正解
    choah
        14
    choah  
       18 小时 36 分钟前
    只要 commit id 还在,reset --hard 基本万能的
    wenrouxiaozhu
        15
    wenrouxiaozhu  
       18 小时 21 分钟前
    @magic3584 #5 先 reset release 分支,然后从 2 的 commit id 切出来一条新分支...
    剩下的就是看你需求了,在 release 分支执行 merge test / merge test -no-ff
    Rickkkkkkk
        16
    Rickkkkkkk  
       18 小时 13 分钟前
    如果是删除,git reset --hard
    jayasme
        17
    jayasme  
       17 小时 54 分钟前
    git merge --squash ,会将分支中的所有 commit 组合为一个然后合并
    belin520
        18
    belin520  
       17 小时 53 分钟前
    -f
    857681664
        19
    857681664  
       17 小时 40 分钟前
    @magic3584 本地删除了分支也没事,用 git reflog 能看到过往历史,找到 test 分支的过往 commit hash 后,再用 git reset 之类的修改提交就好了
    seth19960929
        20
    seth19960929  
       17 小时 8 分钟前
    新建分支
    cherry-pick 2
    合并
    realJamespond
        21
    realJamespond  
       15 小时 7 分钟前
    reset 1 -> cherry pick 2
    vegetableChick
        22
    vegetableChick  
       14 小时 52 分钟前
    cherry-pick
    shily
        23
    shily  
       14 小时 6 分钟前
    #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 分支
    sampeng
        24
    sampeng  
       14 小时 3 分钟前
    开发群里大喊一声: “所有人别提交代码。我要变身了”。
    然后修复本地的代码树,push 。再大喊一声:"变身完毕,都拉一下吧"
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   919 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:47 · PVG 05:47 · LAX 14:47 · JFK 17:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.