推送两个已修改和提交的GIT克隆

推送两个已修改和提交的GIT克隆,git,version-control,Git,Version Control,我在学Git。我创建了3个文件夹e:\temp\repo remote,e:\temp\repo local 1和e:\temp\repo local 2。我想做以下几件事: 在文件夹e:\temp\repo remote上: git init --bash 在文件夹e:\temp\repo local 1上: git clone "e:\temp\repo remote" "e:\temp\repo local 1" 在文件夹e:\temp\repo local 2上: git clone

我在学Git。我创建了3个文件夹
e:\temp\repo remote
e:\temp\repo local 1
e:\temp\repo local 2
。我想做以下几件事:

在文件夹
e:\temp\repo remote
上:

git init --bash
在文件夹
e:\temp\repo local 1
上:

git clone "e:\temp\repo remote" "e:\temp\repo local 1"
在文件夹
e:\temp\repo local 2
上:

git clone "e:\temp\repo remote" "e:\temp\repo local 2"
将文件
file1.txt
复制到
e:\temp\repo local 1\dir1
文件夹中。 将文件
file2.txt
复制到
e:\temp\repo local 2\dir2
文件夹中

在文件夹
e:\temp\repo local 1

git add *
git commit -m "dir1\file1.txt created"
git push
在文件夹
e:\temp\repo local 2

git add *
git commit -m "dir2\file2.txt created"
当我想将本地2 repo推入远程2 repo时,它失败,并显示以下消息:

To E:\temp\repo remote
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'E:\temp\repo remote'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details."
我按照说明并调用拉入回购本地2:

$ git pull
warning: no common commits
remote: Counting objects: 4, done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From E:\temp\repo remote
 * [new branch]      master     -> origin/master
fatal: refusing to merge unrelated histories

但为什么会有不相关的历史呢


如何将第二个用户的更改合并到远程repo中?

它们是不相关的,因为原始存储库从未包含任何历史记录
gitinit--bare
创建一个没有任何历史记录的空(裸)存储库。没有一个提交,也没有一个分支

如果克隆该空存储库,则会得到另一个空存储库,同样没有提交和分支。因此,通过两次这样做,您将得到两个空的存储库,它们除了远程存储之外不共享任何内容

然后,一旦您在这些本地存储库中提交了某些内容,您将创建第一个“根提交”。然后将该根提交设置为该存储库的起点

由于您在两个存储库中都这样做,因此最终会得到两个不同的根提交。它们彼此不兼容,因为它们不共享任何历史记录(它们都是各自存储库的根)


为了避免这种情况,存储库应该从根提交开始。因此,在创建这些克隆之前,只需首先将至少有一个提交的分支推送到存储库。然后,使用
pull
的交互将正常工作,因为Git将发现它们共享一些历史记录(至少是根提交)。

它们是不相关的,因为原始存储库从未包含任何历史记录
gitinit--bare
创建一个没有任何历史记录的空(裸)存储库。没有一个提交,也没有一个分支

如果克隆该空存储库,则会得到另一个空存储库,同样没有提交和分支。因此,通过两次这样做,您将得到两个空的存储库,它们除了远程存储之外不共享任何内容

然后,一旦您在这些本地存储库中提交了某些内容,您将创建第一个“根提交”。然后将该根提交设置为该存储库的起点

由于您在两个存储库中都这样做,因此最终会得到两个不同的根提交。它们彼此不兼容,因为它们不共享任何历史记录(它们都是各自存储库的根)


为了避免这种情况,存储库应该从根提交开始。因此,在创建这些克隆之前,只需首先将至少有一个提交的分支推送到存储库。然后,使用
pull
的交互将正常工作,因为Git将发现它们共享一些历史记录(至少是根提交)。

主节点不是分支吗?是的,但在创建第一次提交之前,即使该分支实际上也不存在。在创建第一次提交之前,Git处于中间状态。那么在克隆命令之前,我应该发送哪些命令?(在远程存储库上)从第一个存储库推送后,只克隆第二个存储库就足够了。这样,第二个将使用历史正确初始化。之后我可以克隆repos并行吗?我想试试这个例子,“master”不是一个分支吗?是的,但是在创建第一次提交之前,即使是这个分支实际上也不存在。在创建第一次提交之前,Git处于中间状态。那么在克隆命令之前,我应该发送哪些命令?(在远程存储库上)从第一个存储库推送后,只克隆第二个存储库就足够了。这样,第二个将使用历史正确初始化。之后我可以克隆repos并行吗?我想试试这个案子。
$ git pull "e:\temp\repo remote"
From e:\temp\repo remote
 * branch            HEAD       -> FETCH_HEAD
fatal: refusing to merge unrelated histories