当前位置:  开发笔记 > 编程语言 > 正文

如何在保持更改的同时从Git存储库中删除选定的提交日志条目?

如何解决《如何在保持更改的同时从Git存储库中删除选定的提交日志条目?》经验,为你挑选了5个好方法。

我想从线性提交树中删除选定的提交日志条目,以便条目不会显示在提交日志中.

我的提交树看起来像:

R--A--B--C--D--E--HEAD

我想删除B和C条目,以便它们不会在提交日志中显示,但应保留从A到D的更改.也许通过引入一个提交,使B和C成为BC并且树看起来像.

R--A--BC--D--E--HEAD

或者,理想情况下,A直接来自D.D'表示从A到B,B到C和C到D的变化.

R--A--D'--E--HEAD

这可能吗?如果有,怎么样?

这是一个相当新的项目,因此目前没有分支,因此也没有合并.



1> jfs..:

git-rebase(1)正是如此.

$ git rebase -i HEAD~5

git awsome-ness [git rebase --interactive]包含一个例子.

    不要git-rebase在公共(远程)提交上使用.

    确保您的工作目录是干净的(commitstash您当前的更改).

    运行以上命令.它启动你的$EDITOR.

    更换pickCD通过squash.它会将C和D合并为B.如果要删除提交,则只需删除其行.

如果您迷路了,请键入:

$ git rebase --abort  


@slhck:http://replay.web.archive.org/20090627051320/http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive
@Eray:只需`推-f`你的改变.如果你不单独工作,不要这样做.
我们怎样才能在远程回购上做到这一点?
@ ripper234:我已经修复了指向博客文章的指向`git-rebase`手册和回归机的链接.

2> CB Bailey..:
# detach head and move to D commit
git checkout 

# move HEAD to A, but leave the index and working tree as for D
git reset --soft 

# Redo the D commit re-using the commit message, but now on top of A
git commit -C 

# Re-apply everything from the old D onwards onto this new place 
git rebase --onto HEAD  master



3> rado..:

这是一种删除特定提交ID的方法,只知道您要删除的提交ID.

git rebase --onto commit-id^ commit-id

请注意,这实际上删除了提交引入的更改.


此命令中的额外HEAD将导致rebase以"分离的HEAD"结束,这是不合需要的.应该省略.
这会恢复我的commit-id引入的更改,OP希望保留更改,只需压缩提交.

4> idbrii..:

扩展JF Sebastian的答案:

您可以使用git-rebase轻松地对提交历史记录进行各种更改.

运行git rebase --interactive之后,你在$ EDITOR中得到以下内容:

pick 366eca1 This has a huge file
pick d975b30 delete foo
pick 121802a delete bar
# Rebase 57d0b28..121802a onto 57d0b28
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit

您可以移动行来更改提交顺序并删除行以删除该提交.或者,您可以添加一个命令将两个提交组合(压缩)到一个提交(先前提交是上面的提交),编辑提交(更改内容)或重新提交消息.

我认为选择只是意味着你想单独留下那个提交.

(例子来自这里)



5> Head..:

您可以通过以下方式非交互式删除示例中的 B和C:

git rebase --onto HEAD~5 HEAD~3 HEAD

或象征性地,

git rebase --onto A C HEAD

请注意,B和C的变化不会在D中; 他们会走了.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有