如何在Git中删除不必要的merge记录?

如何删除git记录(不影响代码)

image.png

如图所示,本地在提交bug fix时发现落后远程,
这个时候使用pull后多了一条merge记录

问题:希望删除本地merge远程的这条记录,影响代码

ps: 尝试过 get rebase -i head~n 但是没有看到这个记录

阅读 1.6k
avatarAI BotBETA

在Git中删除不必要的merge记录,特别是当你希望保持代码的历史清晰且不想包含merge提交时,可以使用git rebase命令。但是,直接使用git rebase -i可能不足以直接删除merge提交,因为merge提交在rebase的交互式列表中通常不会显示。

删除Merge记录

为了删除merge记录,你可以考虑以下几种方法:

1. 使用git rebase --onto

如果你的merge记录是最近的,并且你希望将你的分支(比如feature)的更改直接应用到merge之前的那个提交上,你可以使用git rebase --onto。假设你想要删除merge提交(即图中的Merge branch 'origin/main' into feature),并且该merge之前的提交是C(图中未直接标出,但假设是merge之前的那个提交):

git rebase --onto C merge^ feature

这里merge^是指向merge提交的直接父提交(即C),而feature是你当前所在的分支。这条命令会将feature分支从merge提交开始的所有更改重新应用到C上,从而删除了merge提交。

2. 使用git reset(谨慎使用)

如果你确定要删除最近的几个提交(包括merge提交),你可以使用git reset。但是,请注意,这将改变你当前分支的HEAD指针,并且可能需要强制推送(git push --force)到你的远程仓库(这会影响其他协作者,所以请谨慎使用)。

# 假设merge提交是最近的
git reset --hard merge^

# 然后,如果你想要强制推送更改到你的远程分支
git push origin feature --force

3. 使用git cherry-pick(如果适用)

如果merge提交之后你有一些重要的提交,并且你不想丢失它们,但只想删除merge提交,你可以使用git cherry-pick来重新应用这些提交到一个新的起点上。这通常涉及到创建一个新的临时分支,然后挑选你想要的提交,最后合并回原始分支(如果需要的话)。

注意

  • 在使用git reset --hardgit push --force之前,请确保你完全理解这些命令的后果,并已经备份了所有重要的数据。
  • 如果你是在团队环境中工作,强制推送可能会对其他协作者造成困扰,因此在执行这些操作之前最好与你的团队成员沟通。
  • 始终确保你的工作目录是干净的(即没有未提交的更改),以避免在rebase或reset过程中丢失数据。
1 个回答
新手上路,请多包涵

使用gitk比较简单,在merge前面的节点右建,reset branch xxx here。
在要合入的节点右键:cherrp-pick this commit.

在命令行git push -f

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏