Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在GIT中重做提交历史记录而不重新设置基础_Git_Rebase - Fatal编程技术网

在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