如何将特定文件从一个分支合并到另一个分支

时间:2020-06-05 23:23:31

标签: git github

我在branchB中有两个文件,分别为ComfirmPhone.java和DesignSignIn.java。我只想将这两个代码合并到branchA中。这是我的问题。 ComfirmPhone.java是一个全新文件,其中branchA不存在,而DesignSignIn.java已经存在于branchA中。在DesingSignIn.java branchB中添加了一些代码,希望将这些代码合并到branchA中。

这是我尝试过的命令(现在我在branchA中):

 git checkout --patch branchB ConfirmPhone.java 

但是,该命令未检测到ConfirmPhone.java。而且我也尝试过:

 git merge --no-ff --no-commit branchB

它确实合并了,但是没有指定我要查找的两个文件(ComfirmPhone.java和DesignSignIn.java)。

branchB已经被提交,并且两个分支都是最新的(git pull)。如果有人可以告诉我该命令如何将仅两个文件合并到branchA,将很有帮助

1 个答案:

答案 0 :(得分:2)

每个提交都是您所有文件的集合。任何提交中的任何文件都可以复制到工作树中。分支名称仅是提交的名称。

因此文件不存在的情况非常简单。假设您在branchA中没有文件 B.txt ,而您碰巧知道branchB包含文件 B.txt 并且您希望该文件的版本在branchA中存在。然后说

git checkout branchB -- B.txt

Presto,该文件出现在工作树中。当然,它现在是一个“新”文件,就像其他任何“新”文件一样;直到您branchAadd(在commit中)之前,它才是branchA的“组成部分”。

文件在两个分支中确实都存在的情况类似,但是现在,如果您不想完全覆盖工作树版本,则需要进行--merge检出。假设您位于branchA中,其中有一个文件 A.txt ;这意味着工作树还包含文件 A.txt 的版本。假设您碰巧知道branchB也包含文件 A.txt ,并且您想要将该文件的该版本合并到该文件的该版本中。然后说

git checkout --merge branchB -- A.txt

结果是,如果可以自动合并两个版本的 A.txt ,它们将在工作树中合并。如果无法自动合并它们,则会留下标记为合并冲突的 A.txt 版本;编辑它以解决冲突。无论哪种方式,现在add是文件,commit