Git 分支 : There and Back Again

标签 git github git-branch

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

因此我做了以下事情:

  1. git add -A
  2. git commit -m "WIP。很快回来..."
  3. git checkout master
  4. git pull origin master
  5. git checkout -b quickfix-something
  6. ...改进代码...
  7. git commit -m "修复这个那个"
  8. git push my_origin quickfix-something
  9. hub pull-request -b origin:master -h my_origin:quickfix-something(这只是 GitHub 特定的 PR 开放)
  10. git checkout my_feature_branch
  11. git reset --soft HEAD~1
  12. ...继续在我的功能分支上工作...

但这需要很长时间!

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

  1. git 来回 --start "my_new_branch"
  2. ...改进代码...
  3. git back-and-forth --finish -m "Fix this and that"
  4. ...继续在我的功能分支上工作...

我知道 git-flow 会做类似的事情,但我不想承担它的所有负担,除非有办法按照我想要的方式对其进行最低限度的设置。另外,如果我没记错的话,它不支持在 GitHub 上自动打开 PR。

在我编写自己的脚本来做同样的事情之前,这是我的问题:

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

最佳答案

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

就 #2 而言,您可以通过使用 git stash 而不是 check out master 来消除一些步骤。

  1. git 存储
  2. git fetch
  3. git checkout -b quickfix-something origin/master
  4. ...改进代码...
  5. git commit -am "修复一些东西"
  6. git push my_origin quickfix-something
  7. 集线器 pull 请求 ...
  8. git checkout my_feature_branch
  9. git stash pop
  10. ...继续在我的功能分支上工作...

您的原始问题有 10 个命令。这将它从 2 个命令缩短为 8 个。


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

Alternative insanity: rebase 方法。 除非您喜欢混合使用 LSD 和电锯,否则不要将其用于真实用途。这可能会在 rebase 上发生冲突,具体取决于与您的“改进”相关的上游更改。

  1. git 存储
  2. ...改进代码...是的,在您的功能分支上进行
  3. git commit -am "修复一些我在别处需要的东西"
  4. git fetch
  5. git rebase HEAD^ --onto origin/master
  6. git push my_origin my_feature_branch:quickfix-something
  7. 集线器 pull 请求 ...
  8. git reset --hard ORIG_HEAD^
  9. git stash pop
  10. ...继续在功能分支上工作...

关于Git 分支 : There and Back Again,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24862317/

相关文章:

git - 逐 block 应用提交 block

github - git push 推送到错误的仓库

git - 如何重用git中的分支?

git - 如何阅读 git 日志图

git - 如何在没有ssh auth的情况下设置git服务器

git - 如何使用 Git 临时删除最后一次提交?

Git 的第一步

git - 克隆 GitHub 存储库并 merge 所有 pull 请求

github - 如何在 GitHub 上为组织固定存储库?

git - 多个分支的相同标签名称