我最近在工作中为我的主要 c# 项目设置了一个 git p4 克隆。我正在执行以下操作:
- git checkout -b 新分支
- git p4 rebase(确保分支与仓库是最新的)
- 做出改变
- git 提交 -a
- 做出更多改变
- git 提交 -a
- 准备将文件推送到 p4 仓库
在这一点上,如果自从我开始我的分支以来项目的仓库路径没有任何变化,我可以做一个
- git p4 变基
- git p4 提交
一切都很好。但是,如果仓库中有更改,当我运行“git p4 rebase”时,它会应用仓库中的内容,然后当它尝试重新应用我的提交时,它会出错,说“本地更改将被覆盖通过合并”。然后它继续列出我已经提交的所有文件,告诉我应该提交或存储它们。奇怪的是,如果我运行“git status”,则不会显示任何文件。这里发生了什么?
我能够弄清楚使其工作的唯一事情是执行以下操作:
- git rebase -i HEAD~{自上次仓库更改以来的提交次数}
- 混帐藏匿
- git p4 变基
- git stash 弹出
- git p4 提交
但我也不是这个的忠实拥护者,因为现在我的提交历史丢失了——我最终得到了一个怪物提交。就 p4 depot 而言,这还不错(哎呀,这就是我最终想要的),但我仍然希望我的本地 Git 提交是可见的,否则我在使用 Git 时失去了很多价值。
值得一提的是,Git 在引发最终错误之前还会显示几个空格警告......但它们都以“警告:”为前缀,所以我认为这不是根本原因。