几个修改过的文件只提交分支中的fileS,分支中的文件,

时间:2014-02-09 16:06:45

标签: git

我有一个我正在工作的项目。每当我想创建一个新功能时,我从其主分支分支并创建一个名为FeatureX的新分支,稍后我将合并到主分区。

假设我创建了一个名为featureA的分支,在那里我最终修改了featureA(在fileA.py中)并修改了featureB(在fileB.py中)。

在branchA上,如果像我通常那样提交,我会在branchA中包含在fileB中完成的更改,这是我不想要的。我想提交在branchA中的fileA中完成的更改以及在branchB中的fileB中完成的更改。

我怎么能在branchA中只提交在fileA.py中完成的更改,然后checkout到branchB并在那里只提交对fileB.py的更改?

编辑:

我没有在原始邮件中指定这个,也许我应该澄清一下:fileA和fileB存在于两个分支(branchA和branchB)中。

但是,当我在branchA中提交时,我只想提交在fileA中完成的更改,并保持fileB不被修改。然后签出到branchB并仅提交对fileB所做的更改,使其fileA的版本保持不变。

1 个答案:

答案 0 :(得分:2)

确保您在功能A的右侧分支:

git checkout featureA

添加更改并提交

git add fileA.py  # use correct path to the file, of course
git commit -m "Glorious updates to fileA"

现在,要将您的更改带到另一个功能分支fileB.py,这是一个简单而复杂的案例。

简单案例:fileB.py分支之间没有差异

更改为其他分支,并执行相同的操作

git checkout featureB
git add fileB.py
git commit -m "Fabulous bugfixes to fileB" 

(略有)更复杂的案例:fileB.py不同

如果fileB.py不同,featureB的结帐将失败(Git将中止结帐,并显示未覆盖的更改将被覆盖的消息)。因此,您可以尝试结帐,除非您使用-f/--force开关或使用其他内容,例如git clean ,否则您不会丢失更改。您将收到此错误:

error: The following untracked working tree files would be overwritten by checkout:
    fileB.py
Please move or remove them before you can switch branches.
Aborting

您必须将您的更改隐藏一会儿。像这样:

git stash # will save all uncommitted changed into a temporary space
git checkout featureB
git stash pop # will try to apply your saved changes; there may be a conflicts
    # if there are conflicts (Git will tell you), go through normal  resolution
git add fileB.py
git commit -m "Incandescent stash of bugfixes to fileB"