推送两个已修改和提交的GIT克隆
我在学Git。我创建了3个文件夹推送两个已修改和提交的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
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