簡體   English   中英

我怎么知道分支是否已經在SVN / Mercurial / Git中合並?

[英]How do I know if a branch has already been merged in SVN/Mercurial/Git?

是否有任何方法可以輕松解密(即一目了然)分支是否先前已與另一個分支或主干合並? 我能夠弄清楚的最近的是查看提交注釋並顯示合並的提交注釋。 這樣做的缺點似乎是,除非您知道從哪個分支導入提交注釋,否則無法解密哪些分支已經合並。

編輯 :Mercurial或Git是否比SVN更直觀?

Mercurial或Git是否比SVN更直觀?

是的,非常如此:

sjl at ecgtheow in ~/src/hg-review on webui at tip
[10] $ hg glog
@  changeset: 113:c5debb475273 Steve Losh tip webui
|  summary:   Add file folding.
|
o  changeset: 112:a3ad66636756 Steve Losh  webui
|  summary:   Show skipped-line comments.
|
o  changeset: 111:2e65351af702 Steve Losh  webui
|  summary:   Rough cut of line-level comments.
|
| o  changeset: 110:b599ca22418d Steve Losh  
|/|  summary:   Merge the bug fix.
| |
o |  changeset: 109:e2ddb8631463 Steve Losh  webui
| |  summary:   Fix the event not defined bug.
| |
| o  changeset: 108:001f5ecfd9bc Steve Losh  
|/|  summary:   Merge the webui skipped line counts -- too important to leave in the
| |             branch.
| |
o |  changeset: 107:1cc8e18b1b43 Steve Losh  webui
| |  summary:   Add skipped line counts to diffs.
| |

編輯: Git有一個git log --graph選項與Mercurial的幾乎相同,除了沒有幫助你在這里@字符。

在git上,你可以使用git log來詢問一個分支是否包含另一個分支:

git log topic ^master # list all commits in branch 'topic', but not in 'master'

如果未返回任何內容,則topic已合並。

類型:

svn help mergeinfo

你得到:

mergeinfo: Display merge-related information.
usage: mergeinfo SOURCE[@REV] [TARGET[@REV]]

  Display information related to merges (or potential merges) between
  SOURCE and TARGET (default: '.').  If the --show-revs option
  is not provided, display revisions which have been merged from
  SOURCE to TARGET; otherwise, display the type of information
  specified by the --show-revs option.

Valid options:
  -r [--revision] ARG      : ARG (some commands also take ARG1:ARG2 range)
                             A revision argument can be one of:
                                NUMBER       revision number
                                '{' DATE '}' revision at start of the date
                                'HEAD'       latest in repository
                                'BASE'       base rev of item's working copy
                                'COMMITTED'  last commit at or before BASE
                                'PREV'       revision just before COMMITTED
  --show-revs ARG          : specify which collection of revisions to display
                             ('merged', 'eligible')

在git中,您可以使用--contains列出包含其他分支的分支:

git branch -a --contains feature

將顯示已合並給定功能的所有分支(使用-a ,包括遠程分支)。

git show-branch將顯示git show-branch之間關系的大量細節。 學習有效閱讀它需要一些時間,但它非常有價值,並會在很小的空間內向您展示。

如果chotchki提到的服務器版本至少為1.5,並且您的存儲庫已使用此類版本創建或升級,則屬性svn:mergeinfo將添加到發生合並的任何目錄中。

假設您已經在主干中重新集成了兩個分支,您可以檢查(替換為您的URL):

svn propget svn:mergeinfo svn://localhost/Test/trunk

合並了哪些分支以及修改了哪些修訂。 輸出示例:

/branches/dev/1:35-36
/branches/dev/2:38-39

使用像TortoiseSVN這樣的GUI客戶端,檢查圖表或查看repo-browser中目標目錄的屬性。

Git中 ,您可以使用git branch --merged <commit> ,它列出了從給定提交可以訪問的所有分支( <commit>默認為HEAD,這意味着git branch --merged將列出合並到當前提交的所有分支) 。

或者您可以使用git show-branch branch1 branch2git log --graph --oneline branch1 branch2以圖形方式查看歷史記錄(或使用一些圖形歷史記錄瀏覽器,如gitk,QGit,Giggle,GitX等)。

要查看哪些分支與特定分支合並,我發現Jakub的回復最有用,以及相關命令:

git branch --no-merged

從git幫助:

使用--no-merged時,僅列出未合並到命名提交的分支。

如果您有權訪問TortoiseSVN並且repo是1.5或更高版本,您可以查看它生成的存儲庫圖。 然而,SVN通常會使跟蹤合並變得很困難。

您可以使用svnmerge.py來管理分支。 它告訴您哪些分支已經合並,它只合並新的修訂版。

您可以嘗試使用--dry-run選項執行合並並檢查輸出(即查看它是否要進行合並)。

就個人而言,當我將一個分支與另一個分支合並時,我在提交消息中記錄了修訂號的確切范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM