将git更改为多个单独的分支

时间:2018-02-06 20:36:59

标签: git branch

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

我看到similar question有一个答案涉及樱桃采摘。但是,还没有任何改变,我想以最简单,最直接的方式做到这一点。

最糟糕的是,我可能会分别记下每个更改,分别记录这些更改,然后丢弃所有更改,创建单独的分支,并在单独的分支中进行每个更改。是否有更简单的方法来执行此操作涉及一些git命令?

1 个答案:

答案 0 :(得分:1)

你可以使用git stash。 Source -

  

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

Stashing采用工作目录的脏状态 - 即修改后的跟踪文件和分阶段更改 - 并将其保存在一堆未完成的更改中,您可以随时重新应用这些更改。

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

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

  1. git stash list - 列出您当前拥有的存储条目。每个存储条目都以其名称列出(例如,存储@ {0}是最新条目,存储@ {1}是之前的存储,等等。)
  2. git stash drop - 从存储条目列表中删除单个存储条目。如果没有给出,则删除最新的一个。即存储@ {0}
  3. 通过这些命令耦合,您绝对可以在更精细的级别上操纵您想要的更改。您可以使用手册页或官方文档来获取特定的命令选项。此外,还原错误地清除/删除存储条目。

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

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

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

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