如何删除git记录(不影响代码)
如图所示,本地在提交bug fix时发现落后远程,
这个时候使用pull后多了一条merge记录
问题:希望删除本地merge远程的这条记录,影响代码
ps: 尝试过 get rebase -i head~n 但是没有看到这个记录
在Git中删除不必要的merge记录,特别是当你希望保持代码的历史清晰且不想包含merge提交时,可以使用git rebase
命令。但是,直接使用git rebase -i
可能不足以直接删除merge提交,因为merge提交在rebase的交互式列表中通常不会显示。
为了删除merge记录,你可以考虑以下几种方法:
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提交。
git reset
(谨慎使用)如果你确定要删除最近的几个提交(包括merge提交),你可以使用git reset
。但是,请注意,这将改变你当前分支的HEAD指针,并且可能需要强制推送(git push --force
)到你的远程仓库(这会影响其他协作者,所以请谨慎使用)。
# 假设merge提交是最近的
git reset --hard merge^
# 然后,如果你想要强制推送更改到你的远程分支
git push origin feature --force
git cherry-pick
(如果适用)如果merge提交之后你有一些重要的提交,并且你不想丢失它们,但只想删除merge提交,你可以使用git cherry-pick
来重新应用这些提交到一个新的起点上。这通常涉及到创建一个新的临时分支,然后挑选你想要的提交,最后合并回原始分支(如果需要的话)。
git reset --hard
或git push --force
之前,请确保你完全理解这些命令的后果,并已经备份了所有重要的数据。8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答6.4k 阅读✓ 已解决
8 回答3.8k 阅读
3 回答2.5k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
使用gitk比较简单,在merge前面的节点右建,reset branch xxx here。
在要合入的节点右键:cherrp-pick this commit.
在命令行git push -f