2014-12-04 45 views
1

我想查看提取新提交後觸摸了哪些文件。我希望它能像合併之後看到文件一樣:文件列表,帶有「x次」+(用於插入行)和「y次」 - (用於刪除行)。顯示傳入的git提交中更改了哪些文件

我已經試過:

git log --pretty=format:'%h %d %s %an %ar' --date=short --stat HEAD..origin 

但:

  1. 它顯示我承諾一一 - 而我想看到的整套感動文件好像有隻一個大的承諾

  2. 它不停止在我已經在我的機器上的舊提交。

因此,這裏的目標真的要一目瞭然:如果我合併所有新的提交,哪些文件被傳入提交更改?

+0

'git diff --stat HEAD origin'?雖然我懷疑你的'HEAD'和'origin' refs不是你真正想要的 - 可能更像'master'和'origin/master'或者其他東西... – twalberg 2014-12-04 20:24:39

+0

當然:使用diff,不是log! – user3341592 2014-12-05 21:39:41

+0

儘管這對master分支來說是完美的,但它並不適用於當前分支。我如何調整命令,使其始終在當前分支上工作 - 而不必更改命令的語法(我的目標是讓我可以輸入一個靜態別名)?謝謝。 – user3341592 2014-12-05 21:41:01

回答

2

獲得您正在尋找的報告類型的正確方法是使用git diff。例如:

git diff --stat master origin/master 

如果你的地方分支機構及其上游同行始終遵循相同的模式(例如fooorigin/foo),然後寫一個小的shell功能到一個別名應該工作 - 這樣的事情在你的.gitconfig

[alias] 
upstreamdiff = "!f(){ git diff --stat ${1} origin/${1} }; f" 

如果您有沒有命名origin,或者如果您在使用匹配的分支名稱的習慣是不,它變得更加複雜,你可能需要一個完整的shell腳本拿遙控器分支,找到它的上游合作伙伴,然後運行相應的git diff命令。

編輯:納入自動分支確定:

alias 
upstreamdiff = "!f() { b=$(git symbolic-ref --short HEAD); git diff --stat ${b} origin/${b} }; f" 
+0

而不必鍵入分支名稱(是的,我假設它們在兩側都是相同的),是否可以派生出當前分支名稱,這樣只需鍵入「git upstreamdiff」就可以做正確的事情所有分支? – user3341592 2014-12-05 23:17:07

+0

只要你知道你在一個分支上,你可以使用'git symbolic-ref --short HEAD'。如果你曾經處於獨立的頭部狀態,那麼這將不起作用... – twalberg 2014-12-06 05:40:33

+0

我會盡力的。感謝關於分離狀態的精確度! – user3341592 2014-12-06 11:00:07

1

你問

查看哪些文件是具有後感動牽強

如果取多次而不做mergerebase,然後從merge-base分支到您的上游會給你所有這些提取的總和,而不僅僅是最近最近的提取。我覺得這兩個都很有用 - 我將其中一個別名改爲unmerged,另一個改爲whatfetched

此外,git提供內置功能來識別您的上游,即使您正在跟蹤的分支不具有相同的名稱,這是通過特殊編號@{u}

所以對於你想什麼,你需要檢查

git rev-parse @{u} 

會告訴你你的分支是否有上游。

爲了讓你可以使用

git rev-parse --abbrev-ref --symbolic-full-name @{u} 

這將打印我們origin/$BRANCH,即使你分支跟蹤分支用不同的名稱會用自己的上游的名稱。將它分配給$ UPSTREAM

因此,請參閱最近的提取(whatfetched),您將使用reflog僅顯示上游當前指向的位置和之前指向的位置之間的更改。

git diff --stat $(UPSTREAM) ^$(UPSTREAM)@{1} 

如果你想看看有什麼正是你正在尋找在這裏,你可以使用類似

git reflog ${UPSTREAM}@{now} -2 

要查看你還沒有納入所有的變化(unmerged)的總和,你會想從你的分支的merge-base和上游到上游的差異

git diff --stat HEAD...$(UPSTREAM) 
相關問題