请教 git 里怎么删除记录

22 小时 59 分钟前
 magic3584

请大佬指点:

分支情况如下图:

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

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

2926 次点击
所在节点    git
24 条回复
baiyi
22 小时 56 分钟前
git reflog 查看记录

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

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

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

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

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

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

步骤四
如果有协作开发的同学,揖让让他们拉一下新的远端再接着开发。
yaocf
22 小时 49 分钟前
@yaocf 这个前提只针对 test 分支。也就是如果只有你一个人在 test 分支,就无所谓。
magic3584
22 小时 49 分钟前
@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
22 小时 47 分钟前
@yaocf #7
这个 test 是我本地分支没有提交过远端,而且我本地也已经删除了这个分支。这是我麻烦的点。
LGA1150
22 小时 44 分钟前
git rebase -i 1 的 commit id
然后 git 会打开一个编辑器,含有 2 和 3 的 commit
把 3 所在的行的 pick 改为 drop ,保存退出
( rebase 不会保留 merge 记录,所以顺带删除了 4 )
Ipsum
22 小时 13 分钟前
先到 4 然后软重置到 2 ,接着 commit 后 force push
benjen000
21 小时 56 分钟前
rebase 来合并提交然后强推
hwdq0012
21 小时 55 分钟前
1 楼正解
choah
21 小时 54 分钟前
只要 commit id 还在,reset --hard 基本万能的
wenrouxiaozhu
21 小时 39 分钟前
@magic3584 #5 先 reset release 分支,然后从 2 的 commit id 切出来一条新分支...
剩下的就是看你需求了,在 release 分支执行 merge test / merge test -no-ff
Rickkkkkkk
21 小时 31 分钟前
如果是删除,git reset --hard
jayasme
21 小时 12 分钟前
git merge --squash ,会将分支中的所有 commit 组合为一个然后合并
belin520
21 小时 11 分钟前
-f
857681664
20 小时 58 分钟前
@magic3584 本地删除了分支也没事,用 git reflog 能看到过往历史,找到 test 分支的过往 commit hash 后,再用 git reset 之类的修改提交就好了
seth19960929
20 小时 26 分钟前
新建分支
cherry-pick 2
合并

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1156172

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX