0

我正在使用 Git 来管理一个小型 shell 脚本的小型存储库。它们有很多,没有一个可以证明自己的存储库是合理的,所以我将它们集中在一个存储库中。

为了保持干净,我有一些长期运行的分支——一个用于我仍在处理的脚本,另一个用于我通常已完成但仍在测试的脚本,另一个用于经过验证的、值得信赖的脚本。当然,我偶尔会在树枝之间移动它们。

我目前正在使用 . 在分支之间传输脚本git checkout {branch} {filename},但这只会按原样导入文件,而将其历史记录留在旧分支中。

这不是非常重要,但出于好奇 - 有没有办法在具有历史记录的分支之间移动单个文件?

谢谢!

4

1 回答 1

0

在 Git 中,文件没有历史记录。相反,提交 历史。Git 存储库中的历史记录可通过以下方式找到:

  • 选择一个分支名称(或其他一些可以让您找到提交的哈希 ID 的标签);
  • 观察提交,通过其哈希 ID 找到;
  • 使用包含一个或多个较早提交的哈希 ID 的该提交来退回到较早的提交。

正是这种从提交到更早提交的退步,这就是探索历史的行为。因此,提交历史。

现在,每个提交都包含文件:实际上,每个提交都有每个文件的完整副本,以只读格式保存,压缩并且——因为大多数提交大多是复制一些先前提交的文件不变——去重复。因此,给定一些历史提交我们可以让 Git过滤掉部分甚至大部分历史,只向我们显示 Git 认为我们会发现特别有趣的提交。这是如何工作的。他们查看实际历史的一些子集——一些提交——并简单地对你撒谎,使用精心挑选的、可编程控制的谎言,为你提供有用的信息。git log -- pathgit log --follow -- filename

必须记住,这些是--simplify-by-decoration您可以使用或等选项控制的谎言--full-history。否则你会被谎言所愚弄。实际的历史是提交,Git 正在过滤掉一些。

进行新的提交会使所有现有的提交保持不变。这是必须的,因为任何提交的任何部分都不能被更改,即使是 Git 本身也是如此。(这就是 Git 如何管理分布式版本控制系统的“分布式”部分。)

于 2021-02-07T12:52:33.583 回答