将git孤立文件用作文件夹并保留历史记录
我在不同的存储库中有几个项目,我想在同一个repo下与不同的孤立分支合并。 为此,我创建了一个新的存储库并在其中启动它将git孤立文件用作文件夹并保留历史记录,git,orphan,Git,Orphan,我在不同的存储库中有几个项目,我想在同一个repo下与不同的孤立分支合并。 为此,我创建了一个新的存储库并在其中启动它 如何获取现有回购协议,将其作为孤立分支导入并保留历史记录 是否可以使用作为不同文件夹打开的两个孤立分支?假设我有两个孤立分支,我想同时处理这两个分支,可能吗?我有2个以上,我想与单一的git用户界面打开工作,所以它将更有效地开发。今天我检查了每个存储库。在我将其合并到同一回购协议下之后,我仍然需要并行处理所有分支机构 您正在寻找“git worktree” (可选)创建一个裸存
mkdir .repo/
git clone --bare .../project .repo/project.git
git -C .repo/project.git worktree add `pwd`/project-A branch-A
git -C .repo/project.git worktree add `pwd`/project-B branch-B
git-worktree
(git2.15或更高版本是非常理想的)
长的
master
和标记名称,如v2.1
,这些名称就是您,至少最初是Git,将发现有趣的提交
每次提交,再次表示所有文件的快照;提交不包含更改是由其哈希ID唯一标识的。哈希ID是一个大而丑陋的字母和数字字符串,看起来是随机的,但实际上是提交的全部内容的加密校验和:快照,加上告诉您谁创建了快照(名称和电子邮件地址)、何时(时间戳)、为什么的元数据(日志消息),等等。由于每次提交都存储其直接前一次提交或父提交的实际哈希ID,Git很容易从最后一次提交开始并向后工作:
... <-F <-G <-H <-- master
这里,提交F
和更早的版本在两个分支上,而提交G-H
仅在master
上,而I-J
仅在develope
上。如果我们随后将J
合并到master
中,我们会得到一个稍微特殊的提交:
G--H
/ \
...--E--F K <-- master
\ /
I--J <-- develop
对于由名称master
标识的提交中的每个文件,您现在拥有的不是该文件的两个而是三个副本:
是保存在提交中的文件。无法更改:它是Git-ified、冻结和只读的。使用HEAD:file
查看它Git-show-HEAD:file
是存储在索引中的文件。它可以更改!它是Git-ified的,但您可以随时用新副本替换它。使用:file
查看它Git-show:file
是存储在工作树中的文件。它是一个普通文件,您可以使用它执行任何操作。使用普通(非Git)命令查看或更改它,或者执行任何操作文件
文件
,并且希望Git在下一次提交中存储新版本,则现在必须更新建议的下一次提交:
git add file
这会将工作树文件复制到索引中,用工作树中文件的新Git化副本覆盖:file
因此,索引始终包含建议的下一次提交。您可以使用git add
更新此建议
请注意,如果您git checkout
其他分支,您将使用与您刚刚签出的提交相匹配的其他提交建议替换下一个提交建议。(此规则有一些例外;请参阅。)这反过来意味着索引和工作树实际上是一对:索引索引工作树。当您更改工作树时,通过更改周围的一些文件,您需要通过添加这些文件来更新索引
当您运行git commit
时,git所做的是:
- 保存您的姓名和电子邮件地址
- 保存当前时间(新提交的时间戳)
- 收集来自您的日志消息,进入新提交
- 使用当前提交的哈希ID作为父哈希ID
- 将所有这些以及索引中的Git-ified文件保存到一个新提交中,该提交会自动获取一个新的哈希唯一哈希ID(通过对所有这些数据计算加密校验和)
- 将新提交的哈希ID写入当前分支
...--F--G--H <-- master
让我们创建一个名为feature/short
的新分支:
git checkout -b feature/short
...--F--G--H--I <-- master
\
J <-- feature/short (HEAD)
我们现在看到的是这样的:
...--F--G--H--I <-- master, feature/short (HEAD)
...--F--G--H--I <-- master
\
J <-- feature/short
feature/tall (HEAD)
K
从J
开始的历史可以追溯到I
,然后是H
,依此类推。新提交位于新分支的顶端,feature/short
。我们的索引现在匹配提交J
和工作树,并且HEAD
仍然连接到分支feature/short
您现在已经了解了关于分支的所有内容,除了孤儿分支,我们稍后将介绍它们
添加工作树
git checkout -b feature/short
...--F--G--H--I <-- master, feature/short (HEAD)
...--F--G--H--I <-- master
\
J <-- feature/short (HEAD)
git checkout --orphan feature/tall
...--F--G--H--I <-- master
\
J <-- feature/short
feature/tall (HEAD)
K
...--F--G--H--I <-- master
\
J <-- feature/short
K <-- feature/tall (HEAD)