我有两个分支,它们的历史很少,但彼此相关.
我希望在一个 git提交中将这两者之间的更改.
文件已被删除并在这些补丁之间创建,我希望补丁能够反映出来
即:以下内容不起作用:
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
Run Code Online (Sandbox Code Playgroud)
Bal*_*Pal 93
一个简单的方法是:
git branch tmp branch_a && git checkout tmp)创建和签出分支tmpgit reset --soft branch_bgit commit该提交必须具有所有差异
Cor*_*ein 16
如果你有两个分支:
has-changesneeds-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
Run Code Online (Sandbox Code Playgroud)
如果您不关心has-changes修改(或者您希望以不同的方式保留它),可以稍微简化为:
git checkout has-changes
git reset --soft needs-changes
git commit
git checkout needs-changes
git cherry-pick has-changes
Run Code Online (Sandbox Code Playgroud)
小智 11
这一切都归结为git reset --soft branch_b基于 branch_a 的临时分支之上的 a,并将结果提交回 branch_b。
这是一个循序渐进的过程:
#Start out on the branch with the code we want
git checkout branch_a
#create tmp branch same as branch_a (so that we don't change our local branch_a state during the operation)
git branch tmp
#working directory has all the code that we want, on tmp branch
git checkout tmp
# Change the branch head to the branch we want to be on. All the delta
# between the current source code and branch_b is now staged for commit
git reset --soft branch_b
# Move away from tmp, so our commit will go directly to branch_b
git checkout branch_b
# Now you can examine the proposed commit
git status
# Add the delta we want to the branch
git commit
# Sanity check that the branches have the same content now (should return an empty line)
git diff branch_A..branch_b
# Remove tmp, we don't need it anymore
git branch -D tmp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14523 次 |
| 最近记录: |