tl;dr 如何以与 gerrit 变更集相同的方式更新 gitlab 合并请求?
在相当标准的 gitlab 设置中,我拥有一个项目并希望它保持线性历史。我相应地设置了合并设置,并且从用户界面一切正常。
如果我想将反馈合并到现有的合并请求中,我目前被迫转到git push --force我的分支,我觉得这既不方便又危险。作为反例,gerrit 有一个特殊的目标refs/for/XXX,我可以在其中推送我的更改。Gerrit 然后通过提交消息中的 Id 标识变更集,并愉快地创建变更集的新版本。
gitlab 有类似的功能吗?我可以将我的(重新定位、压缩、修正)变更集推送到某个地方,以便它自动成为现有 MR 的新版本吗?
您不需要强制推送来更新合并请求,除非更改重写了历史记录。
例如,如果您有一个已更改的现有合并请求,my_branch并且您想要进行另一项更改,则可以在对一个或多个文件进行更改后执行以下操作:
# In case newer changes have been made on the remote/GitLab
git pull origin my_branch
git add .
git commit -m 'Additional changes'
git push origin my_branch
Run Code Online (Sandbox Code Playgroud)
上面不需要强制推送,因为它没有重写历史。但是,如果您重写历史记录(例如通过变基),则需要强制推送:
git add .
git commit -m 'Additional changes'
git rebase -i master
git push origin my_branch --force
Run Code Online (Sandbox Code Playgroud)
另一种可能需要不涉及变基的强制推送的情况是,如果其他用户或直接来自 GitLab 对分支进行了更多更改,而您的本地分支上没有这些更改。如果您在进行其他更改之前不拉取这些较新的更改,则需要强制推送。但用力推动也会具有破坏性,因此您可能不想这样做。相反,您需要首先拉取这些更改,正如我在第一个示例中给出的那样,然后在进行更改后进行定期推送。
| 归档时间: |
|
| 查看次数: |
1359 次 |
| 最近记录: |