自动摘要
正在生成中……
假设你正在维护两个版本的 WordPress 网站,一个是 4.x
分支(用于线上环境),另一个是 6.x
分支(用于未来版本的开发)。现在,在 4.x
分支中对 old-functions.php
文件做了修改,而你希望在将 4.x
分支的改动合并到 6.x
分支时,不接收 4.x
中对 old-functions.php
的修改,但仍保留其他功能。
目标
- 将
4.x
分支(stable
)中的改动合并到 6.x
分支(main
)。
- 忽略
4.x
中对 old-functions.php
的修改,而保留 6.x
中的版本。
步骤 1:使用 git merge
进行合并
首先,我们将 4.x
(stable
)分支的更改合并到 6.x
(main
)分支,但我们希望避免 old-functions.php
的冲突。
1.1 切换到 main
分支
git checkout main
1.2 合并 stable
分支的改动
我们使用 git merge
合并 stable
分支的更改,但不立即提交:
git merge --no-commit --no-ff origin/stable
-
--no-commit
:合并后不自动提交,允许你手动处理冲突。
-
--no-ff
:强制创建一个合并提交,即使没有产生冲突。
1.3 解决 old-functions.php
的冲突
如果 old-functions.php
文件在 4.x
分支和 6.x
分支上都有修改,但你希望保留 6.x
分支的版本,可以使用 git checkout --ours
放弃 4.x
的修改:
git checkout --ours old-functions.php
-
--ours
:保留当前分支(main
)的版本,放弃合并分支(stable
)的更改。
1.4 标记为已解决并提交合并
完成冲突解决后,使用 git add
标记 old-functions.php
文件为已解决:
git add old-functions.php
然后提交合并:
git commit -m "Merged stable changes into main, keeping 6.x changes"
1.5 推送到远程仓库
最后,将合并后的 main
分支推送到远程仓库:
git push origin main
步骤 2:使用 git cherry-pick
进行选择性合并
如果你只想从 4.x
分支中选择特定的提交(而非合并整个分支),git cherry-pick
是一个很好的选择。
2.1 切换到 main
分支
git checkout main
2.2 查看 4.x
分支的提交记录
使用 git log
查找你希望从 4.x
分支中引入的特定提交:
git log origin/stable
2.3 使用 cherry-pick
合并特定提交
使用 git cherry-pick
将你想要的提交应用到 main
分支:
git cherry-pick <commit-hash>
2.4 解决冲突
如果在 cherry-pick
时遇到冲突(比如 old-functions.php
的修改),可以使用以下命令保留 6.x
分支的版本:
git checkout --ours old-functions.php
git add old-functions.php
2.5 提交合并
完成冲突解决后,提交更改:
git commit -m "Applied selected changes from stable to main, excluding old-functions.php changes"
2.6 推送更改
将更改推送到远程 main
分支:
git push origin main
步骤 3:使用 git rebase
进行合并
如果你希望保持干净的提交历史,并将 4.x
分支的更改按顺序应用到 6.x
分支上,可以使用 git rebase
。
3.1 切换到 main
分支
git checkout main
3.2 执行 rebase
将 4.x
分支的提交变基到 6.x
分支上:
git rebase origin/stable
3.3 解决冲突并保留 6.x
的版本
如果在 rebase
时遇到冲突,使用以下命令保留 6.x
分支的版本:
git checkout --ours old-functions.php
git add old-functions.php
3.4 继续 rebase
完成冲突解决后,继续执行 rebase
:
git rebase --continue
3.5 推送更改
完成 rebase
后,将更改推送到远程仓库:
git push origin main
总结
通过上述步骤,你可以有效地将 4.x
分支的更改合并到 6.x
分支,并且选择性地放弃某些修改(如 old-functions.php
的修改)。这可以通过以下方法实现:
-
使用
git merge --no-commit --no-ff
:合并更改并手动放弃特定文件的修改。
-
使用
git cherry-pick
:选择性地合并特定的提交,忽略不需要的修改。
-
使用
git rebase
:将提交按顺序应用到目标分支,确保提交历史干净。
这些方法都可以帮助你在多个分支间同步改动,同时保留特定的更改。