在没有Rebase的情况下重做GIT中的提交历史记录

Dan*_*ark 21 git rebase

自从我的最后一个问题被证实是关于GIT的变基,我已经决定我根本不想变基.相反,我想:

  1. 工作工作,随时检查和推动
  2. 抛弃所有这些提交并假装它们从未发生过(所以在工作结束时一个干净的提交)

我目前通过将文件复制到新目录然后将它们复制回新分支(与我的工作分支在同一点分支),然后将其合并到master任何地方.

这只是简单的坏事,为什么?更重要的是:有没有更好的/ GIT方式来做到这一点? git rebase -i迫使我合并(并挑选和压缩).

CB *_*ley 25

最简单的方法是软复位.

检查你的主题分支:

git checkout -b topic master
Run Code Online (Sandbox Code Playgroud)

工作工作工作.

git commit
git commit
git commit
git commit
Run Code Online (Sandbox Code Playgroud)

对此感到高兴,您可以在master上进行新的单一提交

git reset --soft master
git commit
Run Code Online (Sandbox Code Playgroud)

现在合并为主(它将是一个快进)并整理主题分支.(请注意,如果你准备要记住,或者你不需要做这个标签,其中主人,只是在主工作,没有分支,你可能只是做git reset --soft old-mastergit commit,你就不需要这最后的清理步骤.)

git checkout master
git merge topic
git branch -d topic
Run Code Online (Sandbox Code Playgroud)

  • 优秀(+1),但这留下了一个问题:这是正确的方式(使用Git还是实际使用任何(D)VCS)?所有逻辑增量步骤都被压缩,如果有一些令人讨厌的错误与主题的提交,这将是不容易精确定位和修复. (4认同)
  • @Charles Bailey,谢谢你.@VonC,这取决于.我每分钟或更低时间办理登机手续......太多的信息都没有. (2认同)

Ion*_*tan 10

您也可以使用git merge--squash选项.

  • 当我想将主题分支与master合并时,我使用了`git merge --squash`,但也将提交历史记录减少到只提交一次.`git merge --squash`执行合并,但是让你在实际提交合并之前提供一个提交消息.因此,最终结果看起来好像您只向主分支提交了一次. (2认同)
  • 抱歉,我花了三年时间才发现这个答案是正确的。做得好! (2认同)