Git如何将不同的工作副本推送到不同的裸存储库

时间:2011-08-19 04:14:12

标签: git git-branch git-push

当我尝试仅将我创建的新文件推送到不同的裸存储库时,我遇到了问题。

说,我有两个裸存储库: repo1.git repo2.git

  1. 我克隆了repo1.git的副本并创建了一个名为test_repo1.txt的新文件

  2. 我将test_repo1.txt推送到原点(repo1.git)

  3. 我现在创建另一个名为test_repo2.txt的文件 我想将 ONLY test_repo2.txt从我的repo1.git工作副本推送到repo2.git存储库。

  4. 所以,我在repo1.git工作副本下运行了以下命令。

    git add test_repo2.txt
    git commit -m "add only test_repo2.txt file to repo2.git"
    git push repo2.git master:master
    

    完成上述命令后,

    我进入 repo2.git 工作副本,发现“ test_repo2.txt ”文件在那里,但“test_repo1.txt”文件也在那里这不是我想要的。我只想要“test_repo2.txt”而不是“ test_repo1.txt ”。

    为什么“ test_repo1.txt ”文件最终会出现在 repo2.git 裸存储库中?

    你的帮助很大。

    由于

    Finau

1 个答案:

答案 0 :(得分:1)

git按照分支推送提交,而不是单个文件。在您的情况下,您有两个提交,test_repo1.txt的提交和test_repo2.txt的提交,但每个提交都在同一个分支中。

在您添加git pushrepo1test_repo1.txt时,分支机构只会提交您的回购邮件。但是,一旦您执行git add test_repo2.txt并提交,相同分支现在都有两次提交,因此当您推送时,这两项更改都会应用于repo2

要完成您想要做的事情,您需要在本地工作副本中设置两个分支,我们称之为branch_repo1branch_repo2。您将git push每个分支到其各自的回购。你的程序是:

    和以前一样
  1. git clone repo1git checkout master(或者你想从哪个分支开始)
  2. git checkout -b branch_repo1repo1更改创建并签出分支。
  3. git add test_repo1.txt以及git commitgit push repo1 master(将[{1}}替换为您要推送的master分支)
  4. repo1再次返回您的起始分支(不会提交git checkout master
  5. 现在重复:test_repo1.txt为您的git checkout -b branch_repo2更改创建分支。
  6. repo2以及git add test_repo2.txtgit commit
  7. 完成。 git push repo2 master将提交您放入repo1 master分支的提交,branch_repo1将提交您放入repo2 master分支的提交。
  8. 注意在您的branch_repo2中,您不仅要指定要推送到哪个回购,还要指定哪个分支。假设你在git push上工作,你可能会这样做:

    master

    git push repo1 master # while you have the branch_repo1 branch checked out
    

    这将完成你想要做的事。

    (最后注意:我将前缀为git push repo2 master # while you have the branch_repo2 branch checked out 的分支命名为branch_repo1,以避免回购名称/分支名称含糊不清。您可以将分支命名为要)。