我们应该如何干净有效地使用 git 个分支?

How should we use git branches cleanly and effectively?

我们有一个分支 staging,它是我们的主分支。这是部署的分支。

我们有两个开发人员。我们希望单独处理功能,但在将更改推送到 staging.

之前确保兼容性

我们应该怎么做?

这是我认为我们可以做的。

到目前为止,我发现变基往往会引入重复提交。我期望发生的是这个。变基前:

A    staging
| \
B |  merge fix-profile-alignment into staging
  C  feature-avatar-edit

变基后:

A    staging
|
B    merge fix-profile-alignment into staging
  \  
  |
  C  feature-avatar-edit
  1. 如何在不在我们的历史记录中创建重复提交的情况下实现上述目标?或者这样工作可以吗?
  2. pull requests的使用如何进入呢?假设一次只有一个人在该分支上工作,可以在创建拉取请求后执行 git rebase 吗?

如果您想要线性历史,这正是应该采用的方式。

存在重复提交,因为来自重新定位提交的文件的 内容 不同(因为它包含来自 fix-profile-alignment 的更改),因此 SHA 哈希不同。

您可以通过 deleting the commit object

从您的历史记录中删除它们

rebase 之后,你还在feature-avatar-editstagging没有修改。如果你合并到 staging,那么你应该立即 push stagging 到远程以避免后面的冲突(否则你必须做 git pull --rebase 来保持历史线性)。但是您也可以定期进行 rebase 以确保您的功能与其他功能正确集成(例如,如果其他开发人员正在开发许多小功能并定期推送到 stagging)。

我认为您的 "duplicate" 提交可能存在,因为您已推送到远程(如果没有,我们需要您展示重复提交的历史示例)。

开始于:

--A---B---C - staging
       \---D - feature - remote/feature

git checkout feature && git rebase staging之后:

           /---D' - feature
--A---B---C - staging
       \---D - remote/feature

您获得了新的提交 D',但 D 仍然存在。

如果这是你的情况,并且如果你可以在你的遥控器上完全摧毁 D(没有其他人在使用它或者会生你的气),你可以更新你的分支远程 git checkout feature && git push <remote> feature -f.