什么时候在存储库中创建一个新头?

When does a new head is created in a repository?

我假设这是一个奇怪的问题,但我不确定何时为存储库创建一个新的 head,例如在这个问题中:

解释在任何引用的存储库中哪一行导致头数发生变化

1: /home/user> hg 克隆 http://remoteserver/mainrepository 克隆 1

2: /home/user> hg 克隆 http://remoteserver/mainrepository 克隆 2

3: /home/user> cd clone1

4: /home/user/clone1> echo one > a.txt # 创建一个包含“one”的新文件“a.txt”

5: /home/user/clone1> echo two > b.txt # 创建一个包含“two”的新文件“b.txt”

6: /home/user/clone1> echo three > c.txt # 创建一个包含“three”的新文件“c.txt”

7: /home/user/clone1> hg add a.txt b.txt c.txt

8: /home/user/clone1> hg commit -m "Added files"

9: /home/user/clone1> cd ../clone2

10: /home/user/clone2> echo none > a.txt # 创建一个包含“none”的新文件“a.txt”

11: /home/user/clone2> echo none > b.txt # 创建一个包含“none”的新文件“b.txt”

12: /home/user/clone2> echo none > c.txt # 创建一个包含“none”的新文件“b.txt”

13: /home/user/clone2> hg 添加 a.txt

14: /home/user/clone2> hg commit -m "one file"

15: /home/user/clone2> hg 添加 b.txt

16: /home/user/clone2> hg commit -m "another file"

17: /home/user/clone2> hg pull ../clone1

18: /home/user/clone2> hg 添加 c.txt

19: /home/user/clone2> hg commit -m "a third file"

20: /home/user/clone2> hg push -f

21: /home/user/clone2> cd ../clone1

22: /home/user/clone1> hg push -f

23: /home/user/clone1> hg pull

我不是在寻找这个问题的具体答案,只是一些关键点可以帮助我了解它何时发生以及为什么发生。

提前致谢!

可以通过三种方式创建新头像:

  • 当您需要在推送命令上使用--force时,将在您推送到的存储库上创建一个新头。提示:当你不需要
  • 时,切勿将 --force(或等效的 -f)与推送一起使用
  • 当您提交到不是分支头的变更集时;因此,如果您提交一个有子项的变更集。
  • 当您从存储库中拉取时,该存储库会在您本地已有子项的变更集之上添加新的变更集。

在您的情况下,第 22 步将向远程存储库引入一个新头。步骤 #20 中的 push --force 并没有帮助你看到它只发生在 #22 中,因为你因此系统地使 mercurials 静音暗示正在创建一个新的头部。

当您合并不同的 head 时,head 的数量会减少(或 rebase - 但除非在特定条件下,如非发布存储库和阶段 < public,否则不会传播)。