【问题标题】:Commit code to a specific branch _after_ writing all the code (git)?在编写所有代码(git)之后将代码提交到特定分支?
【发布时间】:2012-04-03 05:52:20
【问题描述】:

假设我在 development 分支上,我刚刚重构了一个小时......我没有计划进入,但一个小时后我碰巧在某些特定功能上做了很多工作,比如说在 MVC 的 routing 部分工作。有没有办法将该代码提交到项目中当前可能存在也可能不存在的专用routing 分支,而无需先将其提交到development 分支?我希望它就像在过去的一个小时里,我正在routing 分支中编写代码。

在 hacking/refactoring 会话期间检查特定分支 的问题是您将要做的工作是不可预测的。因此,无法提前知道“结帐routing 分支”。所以我最终要做的只是将所有内容保存在development 分支中。但是,一个庞大的分支的问题在于,在不破坏所有内容的情况下,很难同时处理多个功能。那么,理想的情况似乎是将cat >> 过去一小时的重构(恰好是所有路由)转换为新的/现有的routing 分支。然后在接下来的一个小时里,我可能会做一半的路由,一半的数据库,所以把它扔进routingdatabase,回顾一下。

这可能吗?您使用哪些工作流程来简化此操作?

【问题讨论】:

  • 不是你的问题的解决者,但我认为如果你事先知道你要编码什么会更好。请注意,使用 git,您可以根据需要动态创建任意数量的分支,然后在需要时提交。

标签: git workflow agile


【解决方案1】:

关键是经常提交。这是 Git 的一个很好的特性,当你认为你已经完成时,你可以保留本地提交并将它们压缩在一起。 这样一来,您就可以轻松地进行一段时间的重构,然后为新功能签出一个新分支。

在您的情况下,您只能暂存“重构”更改(对这些更改进行“git add”)并提交到开发分支。之后(您的路由更改仍未暂存且未提交),您可以签出到路由分支并在那里提交您未暂存的路由更改。

【讨论】:

    【解决方案2】:

    最简单的办法是将你所做的任何事情提交给develop,然后在git checkout -b routing 留下两个分支(开发和路由),同时在同一点上

    然后git checkout develop && git reset --hard origin/develop 将开发恢复到您开始黑客攻击之前的位置。

    【讨论】:

    • git reset --hard 应始终持保留态度。它将从工作树中删除所有未提交的更改(如果您碰巧没有提交所有内容)。此外,这假设 develop 最近被推送到 origin 存储库(origin/develop 不必存在)。 git checkout -b routing && git checkout develop 似乎没有必要复杂,为什么不 git branch routing?这样您就可以留在分支develop 上,而不必再次切换。
    • 我总是忘记git branch 的存在来创建新的分支。我被我的co -b 工作流程困住了。 WRT 到reset 是的,你必须小心,但我认为这是不言而喻的。
    【解决方案3】:

    快速流程:

    git stash
    git checkout routing
    git stash pop
    

    否则,您可以随时将更改提交到本地分支:

    git checkout -b wip #create branch wip
    git add <some files>
    git commit
    git add <some files>
    git commit
    etc...
    

    一旦你提交了,你可以跳转到另一个分支并cherry-pick任何你想要的中间提交,或者checkout特定的文件或目录:

    git checkout routing
    git cherry-pick 1bf56de #<- sha1 of one of your commits from your wip branch
    git checkout 2cc54aa -- path/to/myFile #<- INDEX gets updated with this version of myFile
    git checkout 2cc54aa -- whole/dir/
    

    【讨论】:

      【解决方案4】:

      只需检查您想要的分支并使用 -m 标志:

      git checkout -m routing
      

      然后提交您的更改。

      【讨论】:

        【解决方案5】:

        git 中的分支很便宜,所以经常分支。

        在开始任何编码之前,将“开发”分支到一个临时的本地分支。
        在那里工作,正如 MackeiaN 所说,也经常提交,你可以稍后挤压。
        请记住,在推送到公共服务器之前,您可以在本地尽可能多地更改历史记录。
        如果你对历史编辑感到不安全,你可以在做之前再次分支(如果提交被标签或分支引用,你不能丢失它们,反正你有 reflog)

        当您结束编码会话时,将这个临时本地分支合并、变基或重命名到它需要去的任何地方。

        如果你对 git 的所有基本操作都没有信心,我建议你阅读the "Pro Git" book 特别是它的"Git Branching" chapter

        【讨论】:

          猜你喜欢
          • 2017-06-05
          • 2014-02-22
          • 1970-01-01
          • 2017-02-13
          • 2011-08-20
          • 2021-02-27
          • 2020-04-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多