当我尝试仅将我创建的新文件推送到不同的裸存储库时,我遇到了问题。
说,我有两个裸存储库: repo1.git 和 repo2.git
我克隆了repo1.git的副本并创建了一个名为test_repo1.txt的新文件
我将test_repo1.txt推送到原点(repo1.git)
我现在创建另一个名为test_repo2.txt的文件 我想将 ONLY test_repo2.txt从我的repo1.git工作副本推送到repo2.git存储库。
所以,我在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
答案 0 :(得分:1)
git
按照分支推送提交,而不是单个文件。在您的情况下,您有两个提交,test_repo1.txt
的提交和test_repo2.txt
的提交,但每个提交都在同一个分支中。
在您添加git push
后repo1
到test_repo1.txt
时,分支机构只会提交您的回购邮件。但是,一旦您执行git add test_repo2.txt
并提交,相同分支现在都有两次提交,因此当您推送时,这两项更改都会应用于repo2
。
要完成您想要做的事情,您需要在本地工作副本中设置两个分支,我们称之为branch_repo1
和branch_repo2
。您将git push
每个分支到其各自的回购。你的程序是:
git clone repo1
,git checkout master
(或者你想从哪个分支开始)git checkout -b branch_repo1
为repo1
更改创建并签出分支。git add test_repo1.txt
以及git commit
和git push repo1 master
(将[{1}}替换为您要推送的master
分支)repo1
再次返回您的起始分支(不会提交git checkout master
)test_repo1.txt
为您的git checkout -b branch_repo2
更改创建分支。repo2
以及git add test_repo2.txt
和git commit
git push repo2 master
将提交您放入repo1 master
分支的提交,branch_repo1
将提交您放入repo2 master
分支的提交。 注意在您的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
,以避免回购名称/分支名称含糊不清。您可以将分支命名为要)。