【问题标题】:Commit all changes to temporary branch while keeping them uncommited on master将所有更改提交到临时分支,同时保持它们未提交到 master
【发布时间】:2020-05-18 07:51:48
【问题描述】:

我想知道在以下情况下正确的方法是什么。

我正在本地处理master 分支,并且我有多个未提交的更改,我不想提交给origin/master

我想将我当前的更改提交到一些新创建的 origin/temporary 分支(以便其他人可以快速自己运行我工作区的当前阶段),同时将所有更改保留在本地 master 中,以便稍后能够将它们提交给origin/master

我假设我必须以某种顺序使用git stash,但我不确定...

编辑:

你们中的一些人建议,我可以将temporary 合并到master 中。情况并非如此,因为我不假设临时分支包含任何要接受的东西或任何有效的东西。其目的只是为了快速显示当前代码阶段在足以提交掌握或进行适当审查之前肯定会发生变化。

这就是为什么我不想将这些更改视为树中稍后的真正更改,它们只是丑陋的。

【问题讨论】:

  • 事实上的方法是在工作被接受后将temporary合并master。你为什么不想要那个?您也可以以这样的方式合并(快进,变基),如果这是问题的话,它不会作为合并提交可见。另外,你试过什么?您可以提交到一个分支,然后再次签出 master 并将状态重置为 temporary 分支的状态。
  • 这能回答你的问题吗? How to reset a branch to another branch with git?
  • 简而言之,您想要的都是可能的(但是您尝试过什么?),但您不应该这样做,期间。当然,您的同事可以接受在其他分支上可见的更改,但是是什么阻止您在 master 上提交相同的更改之前再进行一次更改?这正是分支和合并的用途。为什么要按照你描述的方式使用 Git?
  • 如果它们还没有准备好提交到任何分支,请使用 stash 将它们收起来。您可能还考虑创建一个辅助工作文件夹,以便您可以将它们未提交到磁盘上,准备好在某个分支上提交。查看 git worktree 命令。

标签: git


【解决方案1】:

这是一种可能性:

# from current master
git add .
git commit -m 'WIP: temporary commit'
git branch temporary
git reset --mixed HEAD~1

为了解释,上面首先将所有文件添加到索引中,并在master 上进行提交。你最终不希望那个提交在那里,但我们稍后会回来。从这一点开始,我们分支出一个新的分支temporary,而实际上并没有切换到那个分支。然后,从master 开始,我们进行混合重置一次提交。这将使您的索引为空,所有原始更改都在工作目录中。请注意,临时提交现在不是 master 分支的一部分,而是新 temporary 分支的 HEAD。

【讨论】:

  • 但是现在你有一个本地 master 分支,它是一个在 origin 之前的分支,意味着将来会被推送到某个地方,如果这些更改被其他人接受。这是一场等待发生的灾难。您可能会不小心将其推送得太快,或者其他人可以修改源/主,因此您必须先合并/拉取。您肯定同意这个工作流程是疯狂的,并且他们应该包含拉取请求或理智的合并策略,而不是“推动一个分支进行审查,然后忽略该分支并在 master 上提交相同的更改”?
  • @CodeCaster 我不同意你所说的大部分内容,而且你不明白我的回答。一般来说,很可能只是做某事git stash 更可取,但我正在回答所提出的确切问题。我的回答确实master 分支留在原点之前,而是本地master 的HEAD 仍将指向与origin/master 相同的提交。请检查您对 Git 的理解。
  • 我非常了解 Git,谢谢。我同意,在再次阅读您的答案后,我的评论中有一些错误,抱歉造成混淆。不过,它的要点是,他们将让另一个开发人员审查“临时”分支,然后忽略该分支,然后再次提交并将他们的工作推送到origin/master。这样做的错误在于,被推送的内容与审查的内容没有任何关系。他们可以在最终的master 提交中省略或添加更改,这不在审查的工作中。那部分是我不喜欢的部分。
  • @CodeCaster 是的,我同意你的观点。但有时,我们需要 Git 中的非标准工作流程。是的,最好只坚持master 分支,或者只是从那里分支一个功能。
猜你喜欢
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 2020-05-04
  • 2015-01-27
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多