Git合并本地与远程提交:按日期优先且保留所有提交记录
按提交日期优先自动合并Git分支的方案
前置操作:拉取远程最新状态
先同步远程仓库的最新提交,但不自动合并到本地分支:
git fetch origin main
对比本地与远程的提交时间
执行以下命令查看两端最新提交的日期,判断哪一方更新:
# 查看本地main分支最新提交时间 git log -1 --format="本地最新提交: %ci %h" HEAD # 查看远程origin/main分支最新提交时间 git log -1 --format="远程最新提交: %ci %h" origin/main
根据提交时间选择合并策略
场景1:本地提交比远程新
要保留本地最新的修改内容,同时将远程提交纳入历史记录,执行:
git merge origin/main --strategy-option ours
该命令会生成一个新的合并提交,所有本地和远程的提交都会被保留,最终文件内容以本地版本为准。
场景2:远程提交比本地新
要保留远程最新的修改内容,同时保留本地提交历史,执行:
git merge origin/main --strategy-option theirs
同样会生成合并提交,完整保留所有提交记录,最终文件内容以远程版本为准。
推送合并结果到远程
合并完成后,将本地分支推送到远程仓库:
git push origin main
可选:自动判断脚本
如果不想手动对比时间,可使用以下Shell脚本自动完成判断与合并:
#!/bin/bash # 将提交时间转为Unix时间戳(便于数值比较) LOCAL_TIMESTAMP=$(git log -1 --format=%ct HEAD) REMOTE_TIMESTAMP=$(git log -1 --format=%ct origin/main) if [ "$LOCAL_TIMESTAMP" -gt "$REMOTE_TIMESTAMP" ]; then echo "本地提交更新,执行ours策略合并" git merge origin/main --strategy-option ours else echo "远程提交更新,执行theirs策略合并" git merge origin/main --strategy-option theirs fi # 推送结果 git push origin main
保存为auto-merge-date.sh,赋予执行权限后即可一键运行:
chmod +x auto-merge-date.sh ./auto-merge-date.sh
内容的提问来源于stack exchange,提问作者Bialy
相关产品推荐
相关产品推荐

