有沒有辦法確定哪些文件被'git merge'成功自動合併AFTER用戶解決了文件衝突並執行了git add/commit?如果任何成功自動合併的文件都由用戶在同一次提交中更新,那麼也很高興知道這一點。我有一個預接收鉤子,只需要在手動合併的文件上運行。如何獲得git自動合併文件列表
回答
確定的基礎上,明確的意見,我會說,有沒有完美的答案,但你可以得到一個近似,即通過簡單地重複合併足夠也許是好事,有--no-commit
,以防止在完成合並,然後使用git ls-files -u
發現哪些文件是當前未合併:
$ git checkout <first-commit-id>
[output indicates detached HEAD]
$ git merge --no-commit <second-id>
[output includes any merge issues]
$ git ls-files -u
的git ls-files
實際輸出取決於合併衝突。例如,用修改/修改合併衝突(在fileB
):
100644 7531cd0643738673e94e850c07a681aedd008bca 1 fileB
100644 85159a3450148691cd6eec96eb06263240990850 2 fileB
100644 bbf71554709c5a9ae8d253b8e15270534f40e3f7 3 fileB
但重命名/刪除衝突(fileB
更名爲fileE
在「主」分支,但在「邊」分支是merged-刪除in):
100644 7531cd0643738673e94e850c07a681aedd008bca 2 fileE
(這裏在這種情況下沒有階段1或3變體)。還可以進行其他組合:請參閱git read-tree
documentation,並特別注意「3向合併」部分。
一旦你得到git ls-files -u
的輸出(如果所有東西都合併乾淨,只要git可以告訴 - 這並不意味着合併是正確的,如果git的語義真的錯了,它甚至可能是完全垃圾 - 但它是什麼混帳可以做自動現在,這大概是一樣什麼混帳可以做自動然後爲好),中止正在進行的合併,並恢復適當的分支:
$ git merge --abort
$ git checkout <original-branch>
如果(「預-receive hook「暗示)這一切都是在--bare
存儲庫中完成的,您需要一個臨時工作樹(或整個克隆)來執行合併,我沒有時間去實驗wi這裏。
有問題的兩個SHA-1,你需要git checkout
,只是合併的兩個父母。 (注意,這一切都假定一個2父合併:合併章魚是右出)
如果執行合併的人曾與-s ours
或一些-X
選項運行,這將不會重複他們做了什麼,並可能給你一個無用的答案,這就是爲什麼這是不完美的任何手段。不過,我懷疑這是最好的,你可以完全自動化。 (也請注意,如果您想要一些可能有意義的細微變化,您可能需要單獨使用git read-tree -m
而不是完整的git merge
。這只是基於我的「懷疑意圖」,我也認爲無論你提出的是什麼,最好都可能具有邊際效用,並且你可能會更好,只需讓用戶在推送之前自行檢查它們。)
Torek,感謝您花時間提供這樣一個徹底的答案......非常感謝。 – user2577365
- 1. 如何在git中僅列出自動合併文件
- 2. 獲得git merge/git合併工具後修改文件的列表
- 3. 自動git合併
- 4. 如何獲得「合併」到git標籤的分支機構列表
- 5. Git:如何不合並文件刪除
- 6. 如何獲得git push將推動的所有ref的列表?
- 7. 如何在合併之前獲取衝突文件列表?
- 8. 如何獲得集合的空列表?
- 9. 在Git中合併文件
- 10. 如何在Git中手動合併所有文件?
- 11. Sourcegear Vault:我如何獲得已簽出文件的自動列表?
- 12. Teamcity&Git - PR合併構建 - 無論如何獲得HEAD提交散列?
- 13. 按文件強制合併文件 - git
- 14. 沒有自動提交的git合併
- 15. Git擴展不再自動合併拉
- 16. SourceTree - Git Rebase導致自動合併
- 17. 哪能的Git合併自動
- 18. Git的叉不再自動合併
- 19. Git的本地分支自動合併
- 20. git集成分支自動化合並?
- 21. 如何獲得Ant文件集中所有文件的列表
- 22. 如何獲得文件大小小於500mb的文件列表?
- 23. 如何從git中自動獲取某個文件(> 1MB)
- 24. 如何獲得videojs自動
- 25. 如何看到自動合併merge = union在git後衝突
- 26. 如何使用git pull自動保存合併提交--rebase?
- 27. 如何讓git在合併衝突時自動打開mergetool?
- 28. GIT擴展如何替換文件並且不合並。
- 29. 如何獲得符合特定條件的列表項數目?
- 30. 如何獲得所有COM自動化服務器的列表?
你可以更精確地定義這個嗎?假設例如我在提交'x'上,並運行'git merge sha1-of-y'併產生合併提交'z',其中'x'和'y'的合併基礎是'b'。如果提交已經完成,我們甚至不知道哪些文件需要手動合併步驟,但是,假設從「b」到「x」文件「f」沒有變化,而從「b」到「y」文件'f' *被改變了,所以'z:f'匹配'y:f'。鑑於從b:f到'x:f'沒有任何變化,是否成功實現了自動合併? – torek
感謝您的幫助,Torek。這裏是場景 - 用戶執行'branchA'的簽出,然後'git合併branchB'。我成功自動合併的定義是任何不會導致碰撞的東西。 T – user2577365
感謝您的幫助,Torek。這裏是場景 - 用戶執行'branchA'的簽出,然後'git合併branchB'。我成功自動合併的定義是任何不會導致碰撞的東西。要回答你的問題,只要git能夠執行合併,那麼是的,出於我的目的,我會認爲這是一個成功的自動合併。我試圖限制當執行「推送」時(耗時)預接收鉤子必須處理的文件數量。在我的場景中,鉤子只需要在用戶執行'git add'的文件上運行。希望這是有道理的。 – user2577365