【问题标题】:Use git squash in branch already pushed and work with colaborators在已推送的分支中使用 git squash 并与协作者合作
【发布时间】:2019-08-19 15:45:41
【问题描述】:

我在之前的回答中不清楚以下命令是否会影响团队合作:

git checkout -b featureX
// add some changes ..
git commit ...
// add some changes ..
git commit ...
// add some changes ..
git commit ...
// add some changes ..
git commit ...
git push ..

and another partner does the following:

git pull origin featureX
// add some changes ..
git commit ...
// add some changes ..
git commit ...
...
git rebase -i featureX ~ 5 featureX
git push origin + featureX

and I then:

git pull
git checkout featureX
git rebase master
// or
git merge master

这会产生问题吗?

如果是这样,作为一个拥有大量提交然后以清晰的方式合并的团队的工作方式是什么?

【问题讨论】:

    标签: git push squash multiple-users


    【解决方案1】:

    会给您带来问题的步骤是这部分:

    git rebase -i featureX ~ 5 featureX
    git push origin + featureX
    
    and I then:
    
    git pull
    

    可能产生问题的原因是,如果您在上次推送后修改了代码,您的代码可能基于不再在提交历史中的提交(它们可能已被修改或删除在交互式变基期间你的队友)。这不是一个“不可恢复”的问题,但它可能会导致混乱、重复提交、错误的合并解决方案等。所以简单的经验法则是 - 不要重写其他人可能用作他们的起点的历史记录工作。

    这里有一些其他的想法可以帮助你组织你的提交而不会遇到 git 历史问题:

    • 在您自己的分支上运行git rebase -i将您的工作推送到共享存储库之前。
    • 或者等到每个人完成提交到你的分支,然后在合并到master之前对每个人的工作执行git rebase -i。这是安全的,因为您知道没有人会在您要修改的提交上做更多的工作。
    • 或在将分支合并到 master 时压缩分支(GitHub(和大多数其他主机)对此有一个选项)。
    • 或者不要太担心你的混乱历史,或者只是努力让你的初始提交更干净。
    • 或在只有您会使用的分支上工作(例如,feature1-alan)。您可以根据需要多次向/从该分支推送和拉取,也可以根据需要在不同的计算机上进行推送。您还可以随时压缩提交并强制推送此分支 - 只要您没有自己的未合并工作挂在不同的计算机上。您可以将此分支合并到团队的分支 featuremaster,或者在您压缩并满意提交的外观之后的任何其他分支。

    【讨论】:

    • 另一种选择是压缩提交,推送分支,然后让每个人都同意压缩的分支现在是主分支,然后重命名分支。这对于多个参与者来说是不切实际的。
    • 1- 我尽可能地这样做,但问题是我使用两台计算机。我为停电做了太多的提交,所以我可以在辅助笔记本上完成我的工作。 (主要是桌面) 2-我认为它可以为错误留出余地。 3-我认为这是方法。 4- 很理想,但停电限制了我。
    • 如果您担心因为更换电脑、停电等原因而失去工作,那么即使您已经推送了,只要您是唯一的人,压扁一个分支总是可以的一个在那个分支上工作的人。所以你也可以考虑在 GitHub 上创建一个“个人”分支(或者在你自己的 GitHub 上的 fork 上),并且只在你完成压缩后将它合并到其他人可以使用它的地方。我会将其添加为上面的第五个选项。
    • 所以,为了简化:我在问题中提出的问题不会影响我,只要我在那个分支工作(然后我可以以平静的方式合并“开发”或“主控”并且其他人从那里继续)。但是,如果我在此过程中使用两台不同的计算机,是否也会给我带来问题?我不明白引用问题是在哪里产生的,抱歉。
    • 假设你的最后一次提交是提交a。现在,假设在计算机 1 上提交 b(在提交 a 之后),在计算机 2 上将 a 压缩到之前的一些提交中。问题是b 是基于a,但a 不再存在(因为它在壁球期间被重新编写)。只要您避免同时创建提交b 并在提交a 上重写历史记录(无论是您还是其他人进行提交),就没有问题。
    猜你喜欢
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 2019-07-17
    • 2022-11-16
    • 2021-03-28
    相关资源
    最近更新 更多