Git:将 fork 合并到主仓库作为一个新分支
问题的出现原因:提问者对于在Git中使用:
符号的用法不太了解,想要了解这个符号的作用和用法。
解决方法:提问者可以参考git-scm.com/book/ch9-5.html中关于refspecs的内容,了解refspecs的定义和如何指定它们。此外,可以使用任何分支名称来替代"copy_of_master",或者指定新refspec的完整路径。
在Git中,分支只是一个refspec,因此你可以将任何refspec推送到其他refspec。例如:
git checkout master git push origin master:copy_of_master
在这个例子中,"copy_of_master"是主仓库中的一个分支名称吗?我以前从未遇到过使用:
符号的情况。你能解释一下它的作用吗?
是的,对于你的目的来说,它只是一个分支名称。你可以将其替换为任何你喜欢的分支名称,或者指定新refspec的完整路径。可以参考git-scm.com/book/ch9-5.html(尤其是关于推送refspecs的部分)了解关于refspecs是什么以及如何指定它们的更多细节。
问题:如何将fork的分支合并到主仓库作为一个新分支?
原因:在合并fork的分支到主仓库时,需要将fork的master分支获取到主仓库作为一个独立的分支。
解决方法:可以通过以下步骤完成合并。
1. 进入主仓库的master分支。
cd /path/to/master
2. 使用git fetch命令将fork的master分支获取到主仓库作为一个新的分支。将路径/path/to/fork和分支名master:fork替换为实际的路径和分支名。
git fetch /path/to/fork master:fork
3. 这样就将fork的master分支合并到了主仓库的fork分支中。
4. 最后,使用git push命令将合并后的分支推送到远程仓库。
git push origin fork
需要注意的是,所有操作都是在主仓库中进行,而不是在fork中进行。
此外,其实不需要手动创建mybranch分支,fetch命令会自动创建该分支。另外,技术上说,并不是真正的合并,而是仅仅进行了fetch操作。Fetch操作不会对工作目录进行任何修改,也不会修改分支,它只是获取对象并创建/修改指向它们的引用。不理解push命令的目的是什么。
在使用Git进行版本控制时,有时会遇到将fork的代码合并到主仓库中作为一个新分支的需求。下面将介绍这个问题出现的原因以及解决方法。
原因:
通常情况下,当我们在GitHub上fork一个仓库时,我们会将原仓库复制到自己的GitHub账户下,以便进行自己的修改和开发工作。然而,当我们希望将我们的修改和工作合并回原仓库时,我们需要将我们的fork代码合并到原仓库的主分支中作为一个新的分支。这样可以保持原仓库的主分支干净,并将我们的修改作为一个独立的分支进行管理。
解决方法:
要将fork的代码合并到原仓库的主分支中作为一个新分支,我们可以按照以下步骤操作:
1. 首先,将fork仓库添加为远程仓库。可以使用以下命令将fork仓库添加为一个远程仓库:
git remote add upstream
2. 然后,使用以下命令创建一个新分支,并将远程仓库的代码拉取到本地:
git checkout -b <新分支名> upstream/master
在上述命令中,`<新分支名>`是你想要创建的新分支的名称,`upstream/master`是远程仓库的主分支。
3. 现在,你已经创建了一个新分支并拉取了远程仓库的代码。接下来,你可以在这个新分支上进行你的修改和开发工作。
4. 当你完成了你的修改和开发工作后,你可以使用以下命令将你的代码推送到远程仓库:
git push origin <新分支名>
在上述命令中,`<新分支名>`是你之前创建的新分支的名称。
5. 最后,你可以在GitHub上打开原仓库,并提起一个新的合并请求(Pull Request)。在合并请求中,选择你刚才推送的新分支作为要合并的分支,然后提交合并请求。
这样,你的fork代码将作为一个新分支出现在原仓库中,并且你的修改和开发工作将被合并到原仓库的主分支中。
通过上述步骤,我们可以将fork的代码合并到原仓库的主分支中作为一个新分支。这样可以保持原仓库的主分支干净,并将我们的修改作为一个独立的分支进行管理。