我想檢索一個提交列表作爲補丁,然後嘗試將它們應用到另一個存儲庫中,該存儲庫中存儲了一個非常接近的項目,以至於我想要檢索補丁:我如何在一個命令中檢索所有補丁? git format-patch和git log -p最好的方法(和差異)是什麼?Git format-patch vs git log -p
回答
我相信你可以嘗試使用git bundle
命令以及創建二進制檔案,然後將其應用於存儲庫的另一個副本。
但是我會說這種方法並不比使用git format-patch
和git am
更靈活,但如果您不想手動查看每個補丁,可能會更快。
git bundle create file.name revision..list
- 將在當前文件夾中創建包含file.name
的文件,並在其中放入指定修訂的內容。
git bundle unbundle file.name
恢復修改在不同的地方。
git log -p
向您顯示反向時間順序(最近的第一個)的變化。這通常不適合用於生成補丁,因爲您希望開始使用最早的修改而不是最新修補。
git format-patch
產生在正確的方向上的補丁(補丁0001
將是最早的變化),並將其保存補丁一個提交-每個文件並將它們格式化爲適合於與git am
在接收側使用的電子郵件消息。
所以你想要的東西,它可能是很有道理的到目標存儲庫上的一個倉庫上運行git format-patch
然後git am
:
cat *.patch | git am
現在有一個git日誌 - 反向。 – yucer
如果你通過git log格式化前綴爲「 - 」符號的路徑的數字,那麼所有的補丁可以在不同的文件中一次生成。例如:
git format-patch $(git log --reverse 073dd505f..fff28ff65 --pretty="%H" -- the/needed/path | awk '{print -NR, " ", $0}')
這將覆蓋您可以從git log應用的所有過濾器。他們不是連續的提交。例如採取相應的給定用戶的斑塊:
git format-patch $(git log --reverse --author="John Doe" --pretty="%H" -- the/needed/path | awk '{print -NR, " ", $0}')
的--reverse選項需要給你按時間順序排列的補丁,因爲git的日誌先給最近期]。
謝謝你的回答,我終於解決了我的問題;) – Newben
- 1. git log -p vs git show vs git diff
- 2. gitweb vs git-log日期
- 3. 沒有裝飾的Git diff/log -p
- 4. git log「--function-context」
- 5. git-log in eshell
- 6. 混帳git cherry/git log --cherry
- 7. 「git rm * .log」和「git rm \ *。log」有什麼區別?
- 8. Git Log Displays Nothing
- 9. Git pull change log
- 10. xargs和git log --grep
- 11. git pull VS git fetch git rebase
- 12. `git log`顯示`git notes`不是
- 13. 忽略`git log`中的git-svn文件
- 14. 如何在Windows Git Gui中做'git log'?
- 15. 如何退出git log或git diff?
- 16. git log如何顯示提交比git log少?
- 17. 爲什麼git log不是默認的git log --follow?
- 18. git log命令的邏輯說明git log master-1.0.83..HEAD
- 19. git-p4 vs git-svn
- 20. git checkout vs git checkout HEAD vs git checkout <CURRENT BRANCH> vs git checkout - <WORKING DIR>
- 21. 相當於「git log -p」的p4命令行?
- 22. 適合git log -p的選項,如果擔心邪惡融合
- 23. git log -1 -p stash @ {0}顯示空的補丁
- 24. 查看「diffitol」中「git log -p」的更改內容
- 25. Git log with color and name-rev
- 26. Git log --graph;頭頂部
- 27. git log漂亮格式
- 28. git log --pretty = oneline win xp cmd
- 29. git log告訴我什麼?
- 30. 「git log -1 fullpath/myfile」with libgit2
你看過'git bundle'嗎? –
感謝這似乎很有趣,但我正在尋找簡單的東西 – Newben
@Newben如果提交共享歷史,'git bundle'非常簡單:用'git bundle創建一個捆綁包create my-bundle HEAD〜10..HEAD'(retrieve最後十次提交,'HEAD〜10'應該出現在目的地上)。使用'git fetch my-bundle:somebranch'在目標上檢索它。現在你有了'somebranch'的提交,你可以合併或rebase,只要你認爲合適。 – user4815162342