在重新设置基址之前保存Git状态

在重新设置基址之前保存Git状态,git,Git,当我要执行可能有问题的Git操作时(例如,需要大量冲突解决的合并/重基),我的典型工作流是: #在“功能分支”上,该分支与“主”有很多冲突` git签出-b温度 git签出特性分支 git重基主控器 这样,如果我在rebase中出错,我将原始状态保存在temp分支中。我想知道是否有比创建临时分支更好的方法。这是跟踪先前状态的好方法,我也这样做(分支或标记) 但是您不一定需要这样做,因为当您使用git reflog(通常是HEAD)时,您将看到的历史记录,因此您可以重置为提交以前指向的分支,即使

当我要执行可能有问题的Git操作时(例如,需要大量冲突解决的合并/重基),我的典型工作流是:

#在“功能分支”上,该分支与“主”有很多冲突`
git签出-b温度
git签出特性分支
git重基主控器

这样,如果我在rebase中出错,我将原始状态保存在
temp
分支中。我想知道是否有比创建临时分支更好的方法。这是跟踪先前状态的好方法,我也这样做(分支或标记)


但是您不一定需要这样做,因为当您使用
git reflog
(通常是
HEAD
)时,您将看到
的历史记录,因此您可以重置为提交以前指向的分支,即使您没有首先为其创建临时分支。

这是跟踪以前状态的一个好方法,我也这样做(分支或标记)


但您不一定需要这样做,因为当您使用
git reflog
(通常是
HEAD
)时,您将看到
的历史,因此,您可以重置为以前指向的分支的提交,即使您没有首先为其创建临时分支。

需要知道的是:分支只是指向提交的名称

另一件需要知道的事情是:重基只是复制提交,但随后它会移动原始的分支指针

因此,您所做的是明智的,尽管不需要签出临时分支并切换回。如果你做了另一个分支指针,你有一个简单的方法重新指向原来的分支指针(通过硬重置),以防你不喜欢事情的结果

因此,在重新设定基准之前:

A -- B -- C <-- main
      \
       X -- Y -- Z <-- branch
A -- B -- C <-- main, origin/main
      \
       X -- Y -- Z <-- branch, origin/branch

A--B--C需要知道的事情:分支只是指向提交的名称

另一件需要知道的事情是:重基只是复制提交,但随后它会移动原始的分支指针

因此,您所做的是明智的,尽管不需要签出临时分支并切换回。如果你做了另一个分支指针,你有一个简单的方法重新指向原来的分支指针(通过硬重置),以防你不喜欢事情的结果

因此,在重新设定基准之前:

A -- B -- C <-- main
      \
       X -- Y -- Z <-- branch
A -- B -- C <-- main, origin/main
      \
       X -- Y -- Z <-- branch, origin/branch

A--B--C您需要执行如下git隐藏操作:

git隐藏创建[]

git隐藏分支[]

然后把这些都放在一边,对你已经在做的分支做任何你想做的事情

然后,如果当前操作不起作用,可以使用以前保存的分支,方法是:

git存储列表

git藏匿秀

最后,如果要应用或移除该隐藏,只需使用:

git stash(pop | apply)[--index][q |--quiet][]

就这样

链接到文档:


您需要执行git隐藏操作,如下所示:

git隐藏创建[]

git隐藏分支[]

然后把这些都放在一边,对你已经在做的分支做任何你想做的事情

然后,如果当前操作不起作用,可以使用以前保存的分支,方法是:

git存储列表

git藏匿秀

最后,如果要应用或移除该隐藏,只需使用:

git stash(pop | apply)[--index][q |--quiet][]

就这样

链接到文档:


我假设您已经将功能分支推送到了远程设备上,这样您就不必备份任何东西,因为它是在远程设备上备份的。在强制推动功能分支之前,请确保在重新设置基础期间没有损坏任何东西

因此,工作流程如下所示

重设基准前:

A -- B -- C <-- main
      \
       X -- Y -- Z <-- branch
A -- B -- C <-- main, origin/main
      \
       X -- Y -- Z <-- branch, origin/branch
如果没有,您可以硬重设为
origin/branch
,然后返回开始(
git reset--hard origin/branch


A--B--C我假设您已经将功能分支推送到了远程设备上,所以您不必备份任何东西,因为它是在远程设备上备份的。在强制推动功能分支之前,请确保在重新设置基础期间没有损坏任何东西

因此,工作流程如下所示

重设基准前:

A -- B -- C <-- main
      \
       X -- Y -- Z <-- branch
A -- B -- C <-- main, origin/main
      \
       X -- Y -- Z <-- branch, origin/branch
如果没有,您可以硬重设为
origin/branch
,然后返回开始(
git reset--hard origin/branch


A--B--C稍微简单一点:
git分支温度;git rebase主机
。创建新分支时无需签出。非常好…谢谢!为了保存提交,我通常使用
git tag temp
创建一个标记而不是分支。无需签回
功能分支
。理论上,您可以使用分支的reflog进行恢复,但我自己更喜欢命名分支。事实上,我常用的方法是:
git分支foo.0;git rebase master
当我在
foo
上时,我希望它现在是版本1。如果我在它变成
git-branch-foo.3之前做过几次;git rebase master
,等等:-)我想我的问题的最佳答案应该是“无需结账,只需执行git branch foo
”,然后触摸其他答案中列出的其他选项。所有的回答和评论都非常有用。在这一点上,我可以为我自己的问题写一个结合了这些答案的答案,但这感觉像是作弊。在SO礼节中(阅读别人的答案后回答自己的问题)可以接受吗?当然,如果有人读到这篇文章时结合了这些选项,我会完全接受这个答案;git rebase主机
。创建新分支时无需签出。非常好…谢谢!为了保存提交,我通常使用
git tag temp
创建一个标记而不是分支。无需签回
功能分支
。理论上,您可以使用分支的reflog来重新创建