【问题标题】:Commit git changes into multiple separate branches将 git 更改提交到多个单独的分支
【发布时间】:2018-07-17 00:29:14
【问题描述】:

自上次提交以来,我已经对代码库进行了几项独立的、不相关的更改。理想情况下,每个更改都应该在自己的分支中进行,但这并没有发生。现在,我想将每个单独的更改移动到一个单独的分支中,以便我可以发布其中一个,并在将来的某个时间将剩余的更改合并到第二个发布分支中。

我看到similar question 的答案涉及采摘樱桃。但是,尚未提交任何更改,我希望以最简单、最直接的方式进行。

在最坏的情况下,我可能会分别记录每个更改,分别记录这些更改,然后丢弃所有更改,创建单独的分支,并在单独的分支中进行每个更改。有没有涉及一些 git 命令的更简单的方法?

【问题讨论】:

  • 你可以在这里找到答案:some old question which may give You an answer
  • 我不太喜欢使用git stash。我在这里要做的是创建一个新的分支名称,例如combined 并提交。你现在有一个可以挑选的提交。回到您要处理的分支,运行git cherry-pick -n combined 以获取已提交的更改而不提交,然后git reset <file> 也取消暂存未提交的更改;然后使用git add -p 仅暂存部分更改,并提交该部分(然后使用git reset --hard 折腾剩余部分)。对每个额外的分支重复此操作。

标签: git branch


【解决方案1】:

你可以使用 git stash。 Source -

通常,当您一直在处理项目的一部分时,事情处于混乱状态,您想切换一些分支来处理其他事情。问题是,你不想提交完成了一半的工作,这样你以后可以回到这一点。这个问题的答案是 git stash 命令。

Stashing 获取工作目录的脏状态(即修改后的跟踪文件和暂存的更改)并将其保存在未完成的更改堆栈中,您可以随时重新应用。

您可以存储,继续您的分支并存储您想要的更改,然后对于您想要这些更改的每个分支,只需使用git stash apply。如果您改用pop,它会从存储中删除状态。

要列出要保留的条目或部分等,请使用

  1. git stash list - 列出您当前拥有的存储条目。每个 stash 条目都列出了其名称(例如,stash@{0} 是最新条目,stash@{1} 是之前的条目,等等)
  2. git stash drop - 从存储条目列表中删除单个存储条目。如果没有给出,它会删除最新的。即 stash@{0}

结合这些命令,您绝对可以在更精细的级别上操作您想要的更改。您可以使用手册页或官方文档来获取特定的命令选项。此外,恢复被错误清除/丢弃的存储条目。

  • 如果您错误地丢弃或清除了存储条目,它们将无法通过正常的安全机制恢复

一个 stash 条目表示为一个提交,其树记录了工作目录的状态,它的第一个父级是创建条目时在 HEAD 处的提交。第二个父级的树记录了创建条目时索引的状态,并使其成为 HEAD 提交的子级。祖先图如下所示:

   .----W
  /    /
-----H----I

其中 H 是 HEAD 提交,I 是记录索引状态的提交,W 是记录工作树状态的提交。

【讨论】:

  • 好的,所以我可以存储自上次提交以来的所有更改,然后将更改应用到其他分支。我正在查看git stash apply,但我不清楚我将如何选择要应用的更改的哪些部分。
  • 定义要挑选的零件?
  • 对...我想实际创建三个单独的分支,每个分支分别保存自上次提交以来对代码库所做的更改。
  • 重读最后一段,您是说将所有更改应用到每个分支,然后手动撤消我不希望在该分支中进行的更改?
  • 是的,我通常做的是创建一个测试分支,在那里应用更改,将其存储并应用于其他分支,然后删除测试分支。在您的情况下,将其应用于三个分支并手动解决和修复问题。确保最后一个 apply 是 pop。
猜你喜欢
  • 2011-06-24
  • 1970-01-01
  • 2015-05-10
  • 2016-06-04
  • 2013-06-08
  • 2018-12-19
  • 1970-01-01
  • 2016-09-15
  • 2016-03-23
相关资源
最近更新 更多