2013-04-11 20 views

Trả lời

6

Dưới đây là hai cách để liệt kê các "thêm" cam kết bạn có mà không phải là về xuất xứ/master:

git log --oneline origin/master..HEAD 
git rev-list --oneline ^origin/master HEAD 

--oneline chỉ liệt kê chúng ở định dạng ngắn hơn. Ngoài ra, nếu chi nhánh của bạn theo dõi nguồn gốc/chủ, một đơn giản git status sẽ hiển thị cho bạn.

3
git diff --stat master origin/master 

Ví dụ đầu ra:

classes/Mammoth/Article.php           | 12 ++++++++++-- 
classes/Mammoth/Article/Admin/Section/Controller.php     | 34 +++++++++++++++++----------------- 
classes/Mammoth/Article/Filter.php          | 14 +++++++------- 
classes/Mammoth/Article/Section.php         | 18 ++++++++++-------- 
classes/Mammoth/Article/Section/IMySQL.php        | 2 +- 
migrations/20130411111424_ChangeNameToURIOnSectionsTable.php   | 14 -------------- 
migrations/sql/up/20130411111424_ChangeNameToURIOnSectionsTable.sql | 5 ----- 
solr-core/conf/schema.xml            | 2 +- 
views/admin/section/form.php           | 8 ++++---- 
views/admin/section/view.php           | 10 +++++----- 
10 files changed, 55 insertions(+), 64 deletions(-) 
3

Nếu bạn up-to-date với quyến rũ của bạn (điều mà tất cả các câu trả lời khác ở đây đoán cũng)

$ git checkout 
Your branch is ahead of 'origin/master' by 9 commits. 
    (use "git push" to publish your local commits) 

Để nhận được rằng thông tin cho tất cả các ngành,

$ git branch -avvv 
+0

Liệu nó thực sự cần thiết để được up-to-date với quyến rũ? Người ta vẫn sẽ được thông báo rằng chúng ta đang có những cam kết chưa được sửa chữa, cho dù repo ngược dòng có thay đổi bao nhiêu đi chăng nữa ... ngoại lệ duy nhất tôi có thể nghĩ là nếu người ta đẩy các thay đổi đến một nút khác, và sau đó đẩy changeset từ nút kia nút và ngược dòng ... bây giờ ngược dòng là trong đồng bộ với repo địa phương, nhưng không có "lấy" một sẽ không biết ... hm :-) – tobixen

+0

@tobixen cũng buộc đẩy và phục hồi từ sao lưu. Nếu Murphy không giống như một người vô tội bỏ qua cánh đồng hoa cúc, tôi không đủ hoang tưởng. Phiên bản tính toán của luật pháp là "nếu bất cứ điều gì có thể đi sai, nó đã đi sai, và muốn máu của bạn." – jthill

0

My nỗ lực đầu tiên để giải quyết vấn đề này như sau:

git push --all -n 2>&1 | grep -q 'Everything up-to-date' || 
echo "Outstanding commits to be pushed at $PWD" 

Nó không mạnh mẽ, vì nó sẽ khẳng định có thể hiểu được ing cam kết về lỗi. Vấn đề lớn nhất là nó sẽ yêu cầu tên người dùng/mật khẩu tức là nếu cố gắng đẩy đến một repo github với https-link (thường là vì tôi đã làm một RO checkout trên một số repo, nơi tôi không phải trực tiếp đẩy thay đổi).

Câu trả lời jtill dường như phù hợp nhất với tôi, vì nó chứa hướng dẫn về cách kiểm tra điều này cho tất cả các chi nhánh. Do đó nỗ lực thứ hai của tôi trông như thế này:

git branch -avvv 2>&1 | grep -q ': ahead ' && 
    echo "Outstanding commits to be pushed at $PWD" 

Tuy nhiên, điều này cũng có ít nhất một caveat - sẽ có dương tính giả nếu một cam kết thông báo có chứa chuỗi ': phía trước'.

Vì vậy, sau đó tôi có lệnh này cho "kiểm tra tình trạng của tất cả các Repos git":

for gitrepo in $(find ~ -name '.git') 
do 
    cd $(dirname $gitrepo) 
    git fetch >/dev/null 2>&1 || 
     echo "Git fetch failed at $PWD" 
    git branch -avvv 2>&1 | grep -q ': ahead ' && 
     echo "Outstanding commits to be pushed at $PWD" 
done 

:-)

Các vấn đề liên quan