如何在git中合并特定文件

Pha*_*007 9 git git-merge git-branch

假设我在MASTER分支上有一个包含100个php文件的项目.要在项目中修复错误,我创建一个单独的分支

git checkout -b bugfix
Run Code Online (Sandbox Code Playgroud)

然后在将3个文件中的错误修复后(例如index.php,register.php和login.php),我将它合并到主分支中

git checkout master
git merge bugfix
Run Code Online (Sandbox Code Playgroud)

上面的代码将合并我所做的所有3个文件的更改,但无论如何,我可以强制GIT只合并2个文件,比如只说login.php和register.php?

Meh*_*ian 10

有两种方法:


方法01

博客文章采用以下解决方案

事实证明,结账也可以帮助解决这个问题.您可以简单地从另一个分支中调出(签出)这些特定文件:

# switch to the branch you want to be your merge destination
git checkout master

# checkout specific files from specific branch
git checkout bugfix login.php register.php

# check the status
git status

# merge them in
git commit -m "your merge comment"
Run Code Online (Sandbox Code Playgroud)

方法02

这是一种简单的替代方法,但它只适用于每个文件有一次提交(意味着每次更改文件时,您已经进行了一次提交,然后移动到下一个文件).在这种情况下,您可以简单地将这些特定提交带到另一个分支(在您的情况下是主分支):

# get which commit you want to take to the other branch (first 7 characters will do)
git log

# switch to the branch you want to be your merge destination
git checkout master

# bring specific commit to this branch (replace the 63344f2 with your own 7 character commit ID)
git cherry-pick 63344f2
Run Code Online (Sandbox Code Playgroud)

  • @axiac如果您仔细阅读问题,您将意识到问题不在于合并分支,而是关于合并文件(这是将特定文件从另一个分支引入所需分支的错误术语)。以上解决方案有效 (2认同)

CB *_*ley 2

Git 中没有办法记录部分合并,所有合并必须合并所有正在合并的提交的整个根树。

您当然可以选择通过选择来自父级之一的文件的未更改副本来解决该合并,但这仍然是“完整”合并,并且在涉及到该文件时,该文件中的更改将被视为已合并随后在涉及的分支之间进行变基或合并。