在GIT中重做提交历史记录而不重新设置基础
自从问了我的最后一个问题后,我决定我根本不想重新设定基准。相反,我想:在GIT中重做提交历史记录而不重新设置基础,git,rebase,Git,Rebase,自从问了我的最后一个问题后,我决定我根本不想重新设定基准。相反,我想: 分支机构 工作,随时登记和推送 扔掉所有这些承诺,假装它们从未发生过(因此在工作结束时进行一次干净的承诺) 我目前的做法是将文件复制到一个新目录,然后将它们复制回一个新分支(与我的工作分支在同一点上分支),然后将其合并到master或任何地方 这真的很糟糕吗?为什么?更重要的是:有更好的/GIT方法吗?GIT-rebase-i强制我合并(并拾取和挤压)。最简单的方法是软重置 因此,请检查您的主题分支: git checkou
master
或任何地方
这真的很糟糕吗?为什么?更重要的是:有更好的/GIT方法吗?
GIT-rebase-i
强制我合并(并拾取和挤压)。最简单的方法是软重置
因此,请检查您的主题分支:
git checkout -b topic master
工作,工作,工作
git commit
git commit
git commit
git commit
很高兴看到这一点,您可以在master上进行新的单次提交
git reset --soft master
git commit
现在合并到master(这将是一个快进)并整理主题分支。(请注意,如果您准备记住或标记master所在的位置,并且只在master上工作而不进行分支,则不需要执行此操作,您可以只执行git reset--soft old master
和git commit
,而不需要这些最后的清理步骤。)
您也可以使用
--squash
选项。非常好(+1),但这就留下了一个问题:这是正确的方法(使用Git还是使用任何(D)VCS)?所有的逻辑增量步骤都被压缩了,如果在提交主题时出现了一些令人讨厌的错误,那就不容易确定和修复了。@Charles Bailey,谢谢你@瞧,这要看情况了。我每隔一分钟或更短的时间登记一次。。。太多的信息和没有一样糟糕。所以要清楚,git reset--soft some_branch在不接触我的文件的情况下将我切换到some_branch/some_commit?好的,我现在看到了:它在那里重置我,但不进行签出。奇怪/太棒了git reset--soft
只需将当前分支头移动到给定的commit,使索引保持不变。正常(--mixed
)git reset
也会将索引重置为给定提交的状态,但这不是您想要的场景,每次提交时都会自动发生挤压,我看不出这对我的问题有什么帮助。并不是说没有,但我需要更多的信息。当我想将主题分支与master合并时,我使用了git merge--squash
,但也将提交历史记录减少为一次提交git merge--squash
执行合并,但是在实际提交合并之前,让我们先提供一条提交消息。因此,最终的结果似乎是你只向主分支承诺了一次。对不起,我花了三年时间才发现这个答案是正确的。干得好@哈哈,没问题。我很高兴它最终帮助了你:)在这种情况下它不会起作用。也许不是去的路-看
git checkout master
git merge topic
git branch -d topic