我有一个我正在工作的项目。每当我想创建一个新功能时,我从其主分支分支并创建一个名为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的版本保持不变。
答案 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"