假设我有两个本地存储库,repo1和repo2都包含带有行的file1.txt:
line1
line2
line3
line4
并且两者都取决于最新的分支。 Repo1做了一个修改:
line3
line4
提交和推送,repo2在没有评估的情况下进行拉动(它没有做任何更改)。 当repo2执行pull时,新获取的文件与本地存储中的文件之间是否应该进行任何比较? 我使用Sourcetree作为git GUI。 这是我使用它时观察到的。 请问有人可以为我澄清一下吗?
答案 0 :(得分:2)
当repo2执行pull时,新获取的文件与本地存储中的文件之间是否应该进行任何比较?
拉动分两个阶段进行:第一阶段只是从远程存储库中获取更改。这是一种完全非破坏性的行为。如果有的话,它会向存储库添加唯一对象,扩展对象数据库。它还将更新远程分支,它们实际上是您从中获取的远程分支。
第二阶段是合并。 Git将首先检查本地进行了哪些更改。由于您没有提交任何其他内容,因此没有不同的更改,也不需要合并。因此,Git可以更新您当地分支的历史记录以匹配遥控器。在这个阶段,Git还会尝试检查更改,以便您的工作目录与刚刚拉出的状态相匹配。如果是干净的工作目录,这意味着跟踪文件没有本地更改,则没有问题:之前可能已完成的所有更改都已提交且不会丢失。所以Git只会更新本地分支并检查新文件。如果是本地更改,则您的工作目录为空。然后,Git将检查实际需要更新哪些文件。如果它可以轻松地做到这一点,它会做到这一点并保持你的变化。有疑问,它会引发一个错误,即您的工作目录不干净并中止所有内容。
所以不管是什么情况,你都不会失去任何东西。
答案 1 :(得分:0)
除非您以不同方式配置存储库或告诉git在发出pull
或merge
命令时显式创建合并提交,git通常会“快速转发”可以干净地应用的某些类型的合并
这可以防止您使用“无用的”合并提交来解决您的历史记录。
编辑:
如果您希望始终进行合并提交,则可以在执行--no-ff
时指定git pull
。可能还有一个选项可以在GUI首选项窗口中执行此操作。