如何从sequential远程分支拉取1月1日至28日的提交?
嘿,刚好之前折腾过类似的需求,先给你明确说:没办法直接用git pull sequential fromdate todate这种命令实现按日期范围拉取提交。Git的pull本质是fetch加merge,它只能拉取整个分支、指定分支或者单个提交哈希,根本不支持直接通过日期区间来筛选要拉取的内容。
下面给你两个不用cherry-pick的可行方案,根据你的需求选就行:
方案1:生成日期范围补丁并应用(适合只需要代码变更、不需要保留原提交记录)
这种方法相当于把指定时间段的代码差异打包成补丁,再贴到你的本地分支上:
- 先把sequential远程分支的最新内容拉到本地缓存(不会合并到当前分支):
git fetch sequential - 生成1月1日到1月28日的代码变更补丁:
这里的git diff sequential/master@{"2024-01-01"} sequential/master@{"2024-01-28"} > seq-date-patch.patch@{"YYYY-MM-DD"}是Git的日期引用语法,用来定位某个日期时分支的状态 - 切换到你要应用补丁的本地分支(比如
main):git checkout main - 应用补丁:
git apply seq-date-patch.patch - 检查代码没问题后,提交变更:
git add . && git commit -m "Apply sequential changes from 2024-01-01 to 2024-01-28"
方案2:用git rebase --onto迁移指定日期的提交(适合需要保留原提交记录)
这个方法可以批量把指定时间段的提交完整迁移到你的本地分支,底层逻辑和cherry-pick类似,但不需要手动逐个选择提交:
- 先拉取sequential远程分支的最新内容:
git fetch sequential - 找到sequential分支上1月1日之前的最后一个提交哈希:
假设输出的哈希是git rev-list -1 --before="2024-01-01" sequential/masterabc123 - 找到sequential分支上1月28日的最后一个提交哈希:
假设输出的哈希是git rev-list -1 --until="2024-01-28" sequential/masterdef456 - 切换到你的目标本地分支(比如
main):git checkout main - 把
abc123到def456之间的所有提交迁移到当前分支:
过程中如果有冲突,解决冲突后执行git rebase --onto main abc123 def456git rebase --continue即可
内容的提问来源于stack exchange,提问作者Rajarshi Das
相关产品推荐
相关产品推荐

