git在两个分支之间从diff创建提交

时间:2013-06-26 15:44:35

标签: git

我有两个分支,历史很少,但彼此相关。

我希望在一个 git commit中对这两者进行更改。

文件已在这些补丁之间删除并创建,我希望补丁能够反映出

即:以下内容不起作用:

git diff branch_a branch_b -- > patchfile
git checkout branch_b
git apply patchfile # deletes and adds are ignored
git commit # we miss the deletes

4 个答案:

答案 0 :(得分:79)

一种简单的方法是:

  • 在branch_a(git branch tmp branch_a && git checkout tmp
  • 创建并结帐分支tmp
  • git reset --soft branch_b
  • git commit

该提交必须具有所有diff

答案 1 :(得分:9)

如果您有两个分支机构:

  1. has-changes
  2. needs-changes

您想将更改从has-changes移到needs-changes,然后执行以下操作:

git checkout -b deleteme has-changes # Create temporary branch to build commit on
git reset --soft needs-changes       # Move diff into index
git commit                           # Create the diff patch commit
git checkout needs-changes
git cherry-pick deleteme             # Apply the diff to the needs-changes
git branch -D deleteme               # Delete the temporary branch

如果您不关心has-changes被修改(或者您更喜欢以其他方式保存它),可以将其稍微简化为:

git checkout has-changes
git reset --soft needs-changes
git commit
git checkout needs-changes
git cherry-pick has-changes

答案 2 :(得分:0)

这一切都归结为基于branch_a的临时分支顶部的“ git reset --soft branch_b”,并将结果提交回branch_b。

这是逐步进行的过程:

mex -largeArrayDims -v -g rx_samples_to_file.cpp ...
    '-IC:\Users\VINAYAK KARANDIKAR\Documents\MATLAB\MATLAB\Thesis\MATLAB_USRP_INTERFACE\UHD_sample_programs_from_GitHub\uhd' ...
    '-IC:\Users\VINAYAK KARANDIKAR\Documents\MATLAB\MATLAB\Thesis\MATLAB_USRP_INTERFACE\UHD_sample_programs_from_GitHub\boost_1_55_0\boost' ...
    '-LC:\Program Files\MATLAB\R2013b\extern\lib\win64\microsoft'  ...
     uhd.lib libmx.lib libmex.lib libmat.lib

答案 3 :(得分:-3)

请参阅git apply --index。这就是它什么都不做的原因。

另外,请确保您位于根目录中,因此.git必须在那里。