推送后回滚未更改文件的Git分支

0lvr5msh  于 2023-01-15  发布在  Git
关注(0)|答案(1)|浏览(136)

我团队中的一位同事在我们的Gitlab存储库中推送了大量遗留代码。
我们不知道它是否使用了推力,但我们知道他在我们的主分支中从遗留分支进行了合并。
我们做了更正,用正确和更新的代码做了另一个推力。但现在我们遇到了一个严重的问题。
例如:如果我更改、添加、提交和推送A文件,而B文件在版本3上,并且其他东西更新了A文件(与我刚刚推送的相同),但B文件在版本2上(但没有更改或推送),则B文件更改为版本2,忽略最新的版本3。
发生了什么?除了删除当前分支并使用新分支之外,我还可以如何更改?

eiee3dmh

eiee3dmh1#

实际上并没有什么问题,这与用力推的动作没有直接关系--尽管听起来确实像是沟通失败,因为在用力推之后,每个人基本上都应该扔掉他们的回购副本,并克隆一个新的回购副本,以确保回购的所有副本彼此同步。您 * 描述的是,您和其他人拥有这些文件的不同版本,尤其是文件B。
首先你需要理解什么是推送。你推送的不是“文件”。你推送的是一个 * 提交 *(或一系列提交)。
那么什么是提交呢?它是项目中所有文件的快照。
所以如果我有版本1的文件A和版本1的文件B,我提交并推送,刚刚推送的提交有版本1的文件A和版本1的文件B,这就是现在出现在远程分支末尾的内容.
然后如果其他人有版本2的文件A和版本2的文件B,他们提交并推送,刚刚推送的提交有版本2的文件A和版本2的文件B,that 就是现在出现在远程分支末尾的内容。
发生这种情况的“方式”并不重要,因为对方只修改了文件A。如果文件B在版本2上,那么它就是提交的一部分,因为它是“每个”提交的一部分。提交是“整个”项目的“整个”状态。
现在,总结一下,这里发生了很多非常错误的事情--比如你们都允许自己在力推动之后失去同步,或者更基本的事实是(或更多?)用户直接推送到同一分支(在我看来,这是对Git的严重滥用)。但如果你打算这样做,那么你得到的结果就是可能发生的事情。换句话说,错误的不是 Git 的行为,而是 * 你 * 的行为。

相关问题