我是 Git 新手,所以请耐心等待。
我有一个 Git 存储库(在 GitHub 上),并且我有很多没有 Git 经验的程序员。当我雇用他们时,我会要求他们向我的存储库发出拉取请求,以便我可以在合并之前查看他们的更改。目前我最大的问题是,我经常在他们 fork 之后将更改合并到我的存储库中,但在他们提出拉取请求之前,这意味着合并他们的拉取请求会覆盖之前的提交。
除了告诉他们避免问题外,我有什么办法可以确保不会发生这种情况?
我是 Git 新手,所以请耐心等待。
我有一个 Git 存储库(在 GitHub 上),并且我有很多没有 Git 经验的程序员。当我雇用他们时,我会要求他们向我的存储库发出拉取请求,以便我可以在合并之前查看他们的更改。目前我最大的问题是,我经常在他们 fork 之后将更改合并到我的存储库中,但在他们提出拉取请求之前,这意味着合并他们的拉取请求会覆盖之前的提交。
除了告诉他们避免问题外,我有什么办法可以确保不会发生这种情况?
确保不会发生这种情况的方法是拒绝任何无法以快进方式应用的提交。
但是没有什么能阻止用户在没有先更新他/她自己的分叉的情况下提交拉取请求。
正确的拉取请求应该以快进的方式应用,这意味着贡献者应该在发出拉取请求之前首先将他/她的工作重新建立在目标仓库的最新提交之上(即 git pull --rebase)。
换句话说,他们应该首先将您合并的其他更改集成到他们自己的本地仓库中,在拉取请求之前测试他们的贡献是否仍然有效。
如果他们这样做,那么覆盖之前的提交不会有任何问题。
如果有,您只需拒绝拉取请求,要求贡献者首先对本地 repo 进行 rebase。
困难的方法:要求他们在合并之前创建一个(本地)分支。
最简单的方法:让我们忘记“如何避免问题”,告诉他们如何解决它。在 git 中,我们git reflog
可以回滚(几乎)任何更改。
PS 合并不会“覆盖”较早的提交。git log ; git reset
即使您没有 reflog,您也可以使用它来修复(大部分)它。