将单个提交拆分为现有git历史记录中的多个提交

时间:2020-05-12 16:51:23

标签: git azure-devops

最近,我将现有的代码库从tfs迁移到了azure devops git。由于许多障碍,最后约20次提交未成功迁移。由于时间限制,我决定只将最新的代码库复制到最近成功迁移的git commit上,并将其作为新的提交提交。从那时起,我们一直在致力于这一承诺。

但是现在我设法检索了在迁移过程中被跳过的提交。我希望修复git提交的历史记录。但是我知道git的黄金法则,一旦提交了历史,就不要弄乱历史。

因此,我的问题是:

  • 当我在master分支中修复历史记录(所有省略的更改都在一个分支中)后,我能否将这些更改推送到原始位置?
  • 将这些更改推到原始位置时,是否会在其他人拉动时自动检索?

1 个答案:

答案 0 :(得分:2)

您将能够将这些更改推到原始位置吗?

这取决于来源的配置方式。 您将使用的语法是

git push -f origin <commit id>:master

进行强制推送。但是,出于明显的原因,某些服务器禁止非管理员角色使用此功能。


将这些更改推到原始位置时,是否会在其他人拉动时自动检索它们?

它们将被检索。真正的问题是他们的本地提交是否适用。我的答案还不太清楚。我相信这可能取决于原始提交的性质。

您当然可以在本地对其进行测试。设置本地分支mastertmp,该分支是旧主HEAD的副本。

git checkout -b mastertmp <commit id of current master>

设置另一个跟踪它的分支:

git checkout -b worktmp -t mastertmp

(出于真实性,可能会向worktmp添加更多提交。没有必要。)
现在,将其指向您建议的新历史记录来“返工” mastertmp

git checkout mastertmp
git reset --hard <commit id of reworked master>

现在将分支更改回worktmp并拉动。

git checkout worktmp
git pull --rebase

如果这行得通,那么没有理由对您的同事不起作用。不论您是worktmp跟踪本地分支还是远程分支,逻辑上都没有关系。

注意:要跟踪哪个分支跟踪哪个分支,请使用命令git branch -vv

相关问题