以下是兩個不同的問題,但我認爲它們是相關的。使用Git如何找到本地和遠程之間的變化
當使用Git時,如何找到哪些更改我已本地提交,但尚未推送到遠程分支?我正在尋找類似於Mercurial命令
hg outgoing
的東西。當使用Git時,如何查找遠程分支在執行pull操作之前所做的更改?我正在尋找類似於Mercurial命令
hg incoming
的東西。
對於第二種:有沒有辦法看到什麼是可用的,然後櫻桃選擇我想拉的變化?
以下是兩個不同的問題,但我認爲它們是相關的。使用Git如何找到本地和遠程之間的變化
當使用Git時,如何找到哪些更改我已本地提交,但尚未推送到遠程分支?我正在尋找類似於Mercurial命令hg outgoing
的東西。
當使用Git時,如何查找遠程分支在執行pull操作之前所做的更改?我正在尋找類似於Mercurial命令hg incoming
的東西。
對於第二種:有沒有辦法看到什麼是可用的,然後櫻桃選擇我想拉的變化?
Git不能通過網絡發送這種信息,如汞可以。但是您可以運行git fetch
(更像hg pull
而不是hg fetch
)從您的遠程服務器獲取新的提交。
所以,如果你有一個分支叫master
和遠程叫origin
,運行git fetch
後,你也應該有一個名爲origin/master
分支。然後,您可以通過執行git log master..origin/master
獲得master
需要成爲origin/master
的超集的所有提交的git log
。顛倒這兩者來獲得相反的結果。
我的一位朋友David Dollar創建了幾個git shell腳本來模擬hg incoming/outgoing
。你可以在http://github.com/ddollar/git-utils找到它們。
使用 「git的日誌origin..HEAD」
使用 「混帳取回獵物」,其次是 「git的日誌HEAD..origin」。您可以使用列出的提交ID挑選單個提交。
當然,上面假設「origin」是遠程跟蹤分支的名稱(如果您使用的是具有默認選項的克隆,則爲「origin」)。
不是一個完整的答案,但git fetch將拉動遠程回購,而不是做一個合併。 然後你可以做一個
git diff master origin/master
爲我工作(但其他方式) - `git diff origin/master master` – 2015-09-01 05:22:19
還有這個,比較各分行:
git log --branches --not --remotes=origin
這是git的日誌手冊頁說這個是什麼:以上
Shows all commits that are in any of local branches but not in any of remote tracking branches for origin (what you have that origin doesn’t).
是outgoing
。 對於incoming
,只是交換:
git log --remotes=origin --not --branches
使用Git 1.7.0開始,有一個特殊的語法,使您可以泛指上游分支:@{u}
或@{upstream}
。
要模仿hg incoming
:
git log [email protected]{u}
要模仿hg outgoing
:
git log @{u}..
我用下面的incoming
和outgoing
別名作出上述更容易使用:
git config --global alias.incoming '!git remote update -p; git log [email protected]{u}'
git config --global alias.outgoing 'log @{u}..'
git log .. @ {u}給了我這些錯誤。 (我有我的git配置中的起源和上游存儲庫)。 錯誤:找不到上游分支'' 錯誤:找不到上游分支'..' 錯誤:找不到'..'的上游分支 致命:模棱兩可的參數'.. @ {u}':未知版本或路徑不在工作樹中。 使用' - '分隔修訂版本的路徑 – Henrik 2011-10-01 13:42:46
如果您的本地分支沒有配置上游,您會得到這些錯誤。要修復,運行`git branch --set-upstream foo origin/foo`。 – 2011-10-01 18:18:01
git-out是一個相當準確地模擬hg outgoing
的腳本。它解析「push -n」輸出,所以如果你需要指定額外的參數來推送,它會產生精確的輸出。
$ git fetch && git log ..origin/master --stat
OR
$ git fetch && git log ..origin/master --patch
$ git fetch && git log origin/master.. --stat
OR
$ git fetch && git log origin/master.. --patch
我會做
$ git fetch --dry-run
爲hg incoming
和
$ git push --dry-run
對於hg outgoing
。
當「git log」和@ {u}回答最初給我「未知版本」錯誤時,我嘗試了Chris/romkyns的建議git push --dry-run
。
您將得到一個輸出,例如「5905..4878 master-> master」。 5905是遠程具有並承諾通過(幷包括)4878的最新提交將應用於遠程。
然後可以使用5905..4878作爲參數傳遞給其他幾個Git命令,以獲得更多的細節:
git diff 5905..4878 # Gives full code changes in diff style
git log --online 5905..4878 # Displays each commit's comment
當你混帳獲取,所有包括分支,標籤(裁判)的內容被臨時存儲在.git/FETCH_HEAD中,其內容可以通過以下命令查看: git log FETCH_HEAD 如果您沒有使用後綴-a和git fetch,那麼默認情況下,FETCH_HEAD的內容將被新內容覆蓋。 從這些內容中,您可以查看並決定要將它們合併到哪個分支,或者如果您只需從提取帶來的提交中進行少量提交,就可以簡單地進行挑選。
看看答案,似乎有一些混淆'hg incoming`和`hg outgoing`實際做了什麼。我找到的最接近的Git等價物是`--dry-run`選項。只要`git pull --dry-run`,你會看到所有需要發生的事情的列表。 – 2012-09-29 10:16:48