Git分支:在那里再回来

时间:2014-07-21 09:57:20

标签: git github git-branch

当我处理某个功能时,我常常偶然发现代码库中可以改进的某些部分。我希望修复这些部分,但我不想在当前的功能分支中修复它们,因为它们只是相关的,如果有的话。

因此我会做以下事情:

  1. git add -A
  2. git commit -m "WIP. Be back soon..."
  3. git checkout master
  4. git pull origin master
  5. git checkout -b quickfix-something
  6. ......改进代码......
  7. git commit -m "Fix this and that"
  8. git push my_origin quickfix-something
  9. hub pull-request -b origin:master -h my_origin:quickfix-something(这只是GitHub特定公关开放)
  10. git checkout my_feature_branch
  11. git reset --soft HEAD~1
  12. ...继续在我的功能分支上工作......
  13. 但这需要很长时间!

    相反,我想做这样的事情:

    1. git back-and-forth --start "my_new_branch"
    2. ......改进代码......
    3. git back-and-forth --finish -m "Fix this and that"
    4. ...继续在我的功能分支上工作......
    5. 我知道git-flow可以做到这一点,但是我不想把它全部带给我,除非我们按照我想要的方式进行最低限度的设置。另外,如果我没弄错的话,它不支持在GitHub上自动打开PR。

      在我编写自己的脚本之前,我的问题是:

      1. 是否有现有的git工具可以满足我的需求?
      2. 除非1,是否有其他方法可以做我想要的事情,只需要更少的步骤?

1 个答案:

答案 0 :(得分:1)

编写自己的脚本似乎是#1的最佳选择。您可以将命令组组合为简单别名,以避免编写完整的脚本。

就#2而言,您可以使用git stash删除一些步骤而不检查主数据。

  1. git stash
  2. git fetch
  3. git checkout -b quickfix-something origin/master
  4. ......改进代码......
  5. git commit -am "Fix some stuff"
  6. git push my_origin quickfix-something
  7. hub pull-request ...
  8. git checkout my_feature_branch
  9. git stash pop
  10. ...继续在我的功能分支上工作......
  11. 您的原始问题有10个命令。这会将2个命令缩短为8个。


    以下是我在尝试消除命令时想到的另一个选项。它不会保存任何打字,确保与上述解决方案相比,生活变得更加复杂。请不要使用它。

    替代精神错乱: rebase方法。 除非你喜欢混合使用LSD和链锯,否则不要将它用于实际。 这可能会在rebase上发生冲突,具体取决于相对于“改进”的上游变化。

    1. git stash
    2. ...改进代码......是的,在功能分支上进行改进
    3. git commit -am "Fix some stuff i need elsewhere"
    4. git fetch
    5. git rebase HEAD^ --onto origin/master
    6. git push my_origin my_feature_branch:quickfix-something
    7. hub pull-request ...
    8. git reset --hard ORIG_HEAD^
    9. git stash pop
    10. ...继续致力于功能分支......