我有一个repo1和repo2本地机器上.它们非常相似,但后者是某种其他分支(repo1不再维护).
/path/to/repo1 $ git log HEAD~5..HEAD~4
<some_sha> Add: Introduce feature X
Run Code Online (Sandbox Code Playgroud)
如何应用commit提交<some_sha>的repo1更改repo2?
我需要准备一些补丁,还是可以cherry-pick在回购之间做一些补丁?
如何做同样但提交范围?
kni*_*ttl 191
您可能希望使用git format-patch然后git am将该修补程序应用于存储库.
/path/to/1 $ git format-patch sha1^..sha1
/path/to/1 $ cd /path/to/2
/path/to/2 $ git am -3 /path/to/1/0001-…-….patch
Run Code Online (Sandbox Code Playgroud)
或者,在一行中:
/path/to/2 $ git --git-dir=/path/to/1/.git format-patch --stdout sha1^..sha1 | git am -3
Run Code Online (Sandbox Code Playgroud)
wRA*_*RAR 89
cherry-pick如果将第二个repo作为远程添加到第一个(然后fetch),则可以执行此操作.
Jak*_*ski 30
作为一个黑客,您可以尝试修改配方,以便在GitTips页面上比较两个不同存储库中的提交,即:
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects \
git cherry-pick $(git --git-dir=../repo/.git rev-parse --verify <commit>)
Run Code Online (Sandbox Code Playgroud)
其中../repo是另一个存储库的路径.
使用现代Git,您可以使用多个修订和修订范围与樱桃挑选.
的$(git --git-dir=../repo/.git rev-parse --verify <commit>)
是在这里翻译<commit>(例如HEAD,或v0.2,或master~2,其中是在从复制第二存储库值)转换成提交的SHA-1的标识符.如果您知道要选择的更改的SHA-1,则没有必要.
但是请注意,Git可以跳过从源存储库复制对象,因为它不知道备用对象存储库只是临时的,用于一个操作.您可能需要从第二个存储库复制对象:
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects git repack -a -d -f
Run Code Online (Sandbox Code Playgroud)
这将从第二个存储库借来的那些对象放入原始存储库存储中
没有测试过.
一个不那么hacky的解决方案是遵循knittl回答:
git format-patchgit am --3way应用补丁小智 6
我写了一个小脚本来应用repo diff的差异输出 https://github.com/raghakh/android-dev-scripts/commit/a57dcba727d271bf2116f981392b0dcbb22734d0
| 归档时间: |
|
| 查看次数: |
49081 次 |
| 最近记录: |