Git:保持私人变更的工作流程,只推动"合并"承诺?

时间:2017-10-21 17:17:13

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

我所处的环境应该仅推动工作和整合提交来解决问题。例如:"此提交修复了错误XY" "此提交添加了功能YZ" 。 (以避免混乱提交历史记录)

如果我想保留本地更改(调试声明,正在进行中),我应该采用哪种工作流程,但经常(每天几次)我被要求git pull 来应用更改团队?

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

"颠覆方式"

我有 subversion 的悠久历史(所以这里的主要问题可能是我正在考虑这个错误的),其中任何远程更改都将自动与我合并本地未提交的更改。冲突将在结账时解决。

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

git stash 
git pull 
git stash pop

" git方式" (经常提交,经常合并?)

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

我在考虑保持私密"功能"分支,然后在完成某些事情并准备好发布后,将功能分支的局部压缩合并为主,以便发送到远程存储库的内容是单个提交说“#34;这解决了问题XY?"

到目前为止我还没有尝试过,但看起来好像我不得不一直做很多合并,所以感觉不对。

2 个答案:

答案 0 :(得分:0)

我一直处于类似情况并且大量使用git merge --squash

我会维护一个分支,包含我想要的任何提交,因为我想出了问题,然后将它最终压缩为一次提交,并参考它解决的bug /缺陷等。

另一种选择,如果你最终在一个分支中解决多个项目,因此希望有多个提交,但仍然只有#34;到点#34;提交是在分支git rebase -i内进行交互式变基。

这允许您有选择地将提交按顺序压缩到单个提交消息中,但是您根本不必将其缩小到最终提交。

如果您正在进行大量合并,这可能会很痛苦,但是如果您遵循流行的git流模型之类的东西,那么无论如何您可能会为每个项目创建大量短期分支。

答案 1 :(得分:0)

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

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

一个例子。您有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和master,但你当然可以这样做。

最后一步也可以这样做:

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

这表示feat1已完全集成到主分支,即公共分支。