【问题标题】:Git: Workflow to keep private changes and only push "consolidated" commits?Git:保持私有更改并仅推送“合并”提交的工作流程?
【发布时间】:2018-04-02 14:49:29
【问题描述】:

我所处的环境应该只推送解决问题的工作和合并提交。例如:“此提交修复了错误 XY”“此提交添加了功能 YZ”。 (避免弄乱提交历史)

如果我想保留我的本地更改(调试语句、正在进行的工作),我应该采用什么工作流程,但通常(每天几次)我被要求 git pull 应用来自团队?

我猜 git 的想法是你经常提交,但对我来说理想的情况是如果我可以私下跟踪我正在进行的工作并且只将“合并”提交发布到远程存储库。同时能够不断地合并我的团队成员已经完成的工作。

“颠覆方式”

我在 subversion 方面有很长的历史(所以这里的主要问题可能是 我在想这个错误),任何远程更改都会自动与我的本地未提交的更改。结帐时将解决冲突。

到目前为止,在 git 中我一直在做:

git stash 
git pull 
git stash pop

“git 方式”(我猜经常提交,经常合并?)

一般来说人们如何在 git 中处理这个问题?

我正在考虑保留私有“功能”分支,然后在完成并准备好发布某些内容后对功能分支进行本地压缩合并以掌握,以便发送到远程存储库的内容是单个提交说“这解决了 XY 问题?”

到目前为止我还没有尝试过,但看起来我必须一直进行很多合并,所以感觉不对。

【问题讨论】:

    标签: git svn branching-and-merging git-stash


    【解决方案1】:

    我也遇到过类似的情况,大量使用git merge --squash

    当我发现问题时,我会维护一个包含我想要的任何提交的分支,然后在最后将其压缩为一个提交,参考它解决的错误/缺陷或类似问题。

    如果您最终在一个分支中解决多个项目,因此希望有多个提交但仍然只是“切中要害”的提交,另一种选择是在分支中进行交互式 rebase,git rebase -i

    这允许您有选择地按顺序将提交压缩到单个提交消息中,但您实际上不必将其缩小到仅 1 个最终提交。

    如果您要进行大量合并,这可能会很痛苦,但如果您遵循流行的 git 流模型之类的东西,您可能会为您处理的每个项目创建大量短期分支。

    【讨论】:

      【解决方案2】:

      您需要的解决方案是(习惯)功能分支。您还应该使用 master 分支,您可以在其中获取其他开发人员的更改而不影响您正在进行的工作(因此您不必做那个丑陋的 git stash / git stash pop)。

      然后您将使用 mergerebase 将主分支集成到您的功能分支中。

      一个例子。您有 2 个功能分支,一个已准备好简单的功能分支,另一个需要更多测试且您当前正在其中工作。您需要发布您的简单功能。为此,您需要首先获取上周(您上次更新)发布的其他人的更改。

      为此,您首先检查主分支:

      (feature2) $ git add -A
      (feature2) $ git commit -m "preemtive commit" # you can also to a stash save
      (feature2) $ git checkout master
      (master) $ git fetch --all mirror # get changes from the 'mirror' remote
      # check the changes
      (master) $ git merge mirror/master # integrate other people changes into master branch
      (master) $ git checkout feat1 # the simple feature to be published
      (feat1) $ git merge master # merge the changes into the feat1 branch
      # do the necessary tests, check everything is OK
      (feat1) $ git push mirror feat1
      (feat1) $ git update-ref refs/heads/master HEAD # this i will explain later
      

      就是这样。现在你可以回到你的 feature2 分支。你不需要在那里整合你的专长和大师,但你当然可以做到。

      最后一步也可以这样完成:

      (feat1) $ git checkout master
      (master) $ git merge --ff-only feat1
      

      这表示feat1已经完全集成到master分支,public分支中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        • 2012-04-28
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        相关资源
        最近更新 更多