Git重基忽略相同的更改行
我试图理解git rebase有一个奇怪的问题。另一个开发人员和我正在处理同一个项目,都是从Git重基忽略相同的更改行,git,Git,我试图理解git rebase有一个奇怪的问题。另一个开发人员和我正在处理同一个项目,都是从develope分支推/拉。 我们正在处理相同的文件,因此我们预计在从git推/拉时会出现一些冲突 因此,我们要做的是: 我的同事首先提交并推动所有更改 我也会提交我的更改,但在推之前,我会从回购协议中获取新的更新。拉动结束时没有冲突。我有点惊讶,但我认为这只是运气,我们没有修改相同的确切行 在那之后,我将我的提交推到git rebase上,没有任何错误 我们对这次行动非常满意,直到我们意识到有些台词在我
develope
分支推/拉。
我们正在处理相同的文件,因此我们预计在从git推/拉时会出现一些冲突
因此,我们要做的是:
为什么git没有抱怨同一行在每个版本中不同?我知道git会注意注释并将其标记为更改。是因为我重新设置了基准,而不是执行合并提交吗?有人能帮我理解发生了什么事吗?我担心这种更改会被忽略,并导致项目后期出现错误。您的git流是错误的,这里有两件事: 1) 切勿在公共分支上使用git-rebase(或其他修改历史记录的命令)。创建分支、对它做一些工作、重新设置基础并推送它是可以的,但是当它已经被其他人推送和使用时,不要进行重新设置基础 2) 您可能来自类似于
svn
的地方,并且习惯于在单个分支上工作。Git具有轻量级分支,最好为每次更改创建新分支:
- 永远不要直接提交到主分支,将完成的功能放在一起的将是您的集成分支
- 为每个新特性创建一个新分支,并在那里进行开发
- 功能完成后,检查更改:如果更改良好,则将其合并到master
- 如果存在冲突,则恢复合并(或者如果使用github,则不允许合并)
- 将主机合并回您的分支
- 解决冲突
- 推送最终的分支版本
feature
的分支是从主节点创建的
你和你的同事都有这个分支,并致力于它(这就是我所说的“公共”分支)
1) 您和同事有一个功能分支
... O ---- O ---- A ---- B origin/master
\
---- origin/feature
\
--- C your/feature
\
\-- D colleague/feature
2) 您可以在主控形状上重新设置要素分支的基础
请注意,我们更改了历史记录,并在your/feature
分支上有了新的C'commit,它不再从origin/feature
派生:
... O ---- O ---- A ---- B --- origin/master
\ \
--- \ origin/feature
\ \
\ --- C' your/feature
\
\-- D colleague/feature
3) 现在您有了一个分支,它与来源/功能
和同事/功能
无关。这就像您创建了一个新分支并将更改移动到它上一样
如果您试图将功能
分支推回到源代码
存储库,git会告诉您分支已经分叉
您仍然可以使用--force
推送它,历史记录如下:
... O ---- O ---- A ---- B --- origin/master
\ \
\ \ /-- origin/feature
\ \ /
\ --- C' -- your/feature
\
\-- D colleague/feature
看看发生了什么
现在,您同事的分支已与您的分支和源分支断开连接,因此他在推/拉更改时会遇到问题
此时,他可以尝试使用--force
并覆盖功能
分支的变体
这样,您可能会丢失一些更改。
嗯,没有什么东西是真正丢失的,可以恢复的,但处理这种情况可能会很复杂。我可以解释到底出了什么问题,以及为什么如果您能够重现这个问题,在这种情况下,请使用您和同事方发出的git命令序列更新您的问题。仅从文本描述很难理解问题出现的确切原因。@BorisSerebrov我们使用图形界面来处理git,因此我无法轻松复制/粘贴命令序列。我感谢您的反馈,但如果您能解释原因以及如何操作,我会更有用。为什么我不应该在公共分支机构上使用rebase?另外,我最初的问题是,为什么git在修改相同的行时没有抛出冲突错误?如果这与重新定基有关,你能解释一下原因吗?@我补充了关于为什么重新定基对公共分支机构不安全的解释。至于解释——如果您没有使用的确切命令,那么确实无法确定。我强烈建议不要将GUI git客户端用于除历史浏览之外的任何事情。如果您希望安全并保持控制,那么您应该真正了解您使用的确切git命令以及它们的具体用途。