2011-06-23 39 views
30

Tôi có một kịch bản trong đó có một số chi nhánh theo dõi từ xa trong kho lưu trữ cục bộ của tôi mà tôi phải đồng bộ hóa. mô hình workflow của chúng tôi là:Làm cách nào tôi có thể biết chi nhánh "gốc" từ xa mà chi nhánh của tôi dựa trên?

  • tạo ra một ngành tại địa phương, dựa tắt của các mong muốn từ xa theo dõi chi nhánh
  • thực hiện thay đổi của chúng tôi
  • build/kiểm tra/sửa chữa
  • cam
  • đẩy trở lại điều khiển từ xa máy chủ

Tôi nhận thấy rằng "trạng thái git" không hiển thị cho tôi chi nhánh địa phương của tôi dựa trên chi nhánh nào trừ khi có điều gì đó thay đổi; tức là các thay đổi cục bộ không được cam kết hoặc lần tìm nạp gần đây đặt chi nhánh địa phương của tôi vào sau thời gian. Có cách nào để biết chi nhánh của tôi chi nhánh địa phương nào dựa trên mà không phải thay đổi mọi thứ? Một cái gì đó như, "git status -showparentbranch" hoặc một số lệnh khác sẽ hiển thị điều này. Thỉnh thoảng tôi chạy vào nhu cầu này nhưng không biết làm thế nào để đáp ứng nó.

Trả lời

14

Git không theo dõi chi nhánh nào mà một cam kết được thực hiện. Không có cách nào để nói. Nếu các cam kết xảy ra trên repo của bạn, sau đó bạn có thể kiểm tra các reflog, nhưng đó là về nó. Hãy xem giải thích của DAG trong the Pro Git book - cũng đọc lên trên reflog trong đó.

Bạn cũng có thể hiển thị lịch sử tốt hơn với gitk --all hoặc git log --graph --decorate

Hope this helps.

+3

'git show-branch' nói với bạn về sự phân kỳ, quá. –

+1

yup. Nắm bắt tốt. Bạn cũng có thể thêm '--oneline' vào lệnh log để phù hợp với nhiều commit hơn trên màn hình. –

+1

Rất nhiều lời xin lỗi. Tôi quên bình luận về việc liệu điều này có trả lời câu hỏi của tôi hay không. Tôi không chắc lắm. Từ phản ứng của bạn, tôi tự hỏi nếu tôi hỏi câu hỏi một cách chính xác. Tôi không cố gắng tìm ra những nhánh cây nào bị ảnh hưởng bởi cam kết của tôi. Thay vào đó, tôi đã tự hỏi nếu có một cách biết chi nhánh xa xôi nào, chi nhánh địa phương của tôi dựa trên. –

9

git branch -vv sẽ:

  • danh sách tất cả chi nhánh địa phương của bạn
  • hiển thị tên của các chi nhánh ở xa bên cạnh mỗi chi nhánh địa phương
  • nổi bật các chi nhánh địa phương tích cực

. ..từ đây bạn sẽ có thể xác định nhánh từ xa của nhánh đang hoạt động hiện tại, và hơn thế nữa.

Nếu bạn có nhiều chi nhánh địa phương, danh sách có thể rất dài. Sử dụng git branch -vv | grep SOMEWORD để giới hạn đầu ra cho chỉ các nhánh chứa SOMEWORD. Nếu bạn có thể nghĩ về một từ duy nhất cho chi nhánh của bạn, bạn sẽ nhận được bộ lọc tốt nhất (chỉ một kết quả).

Bạn cũng sẽ nhận được một số dữ liệu bổ sung trong đầu ra, cụ thể là số (SHA1) và thông báo của lần commit cuối cùng. Bộ lọc grep sẽ áp dụng cho các bộ lọc này. Tôi không thể tìm cách loại trừ nó.

Từ Git branch documentation:

-v

-vv

--verbose

Khi ở chế độ danh sách, chương trình và cam kết sha1 dòng tiêu đề cho mỗi đầu, cùng có quan hệ với chi nhánh thượng lưu (nếu có). Nếu được cung cấp hai lần, cũng in tên của nhánh ngược dòng (xem thêm git remote show).

(Dựa trên nhận xét của bạn, có, có vẻ như câu hỏi 'đúng' sẽ hỏi về nhánh "từ xa" thay vì nhánh "cha mẹ". Nhưng đó cũng là những gì tôi đã tìm kiếm! :))

35

thử điều này:

git log --graph --decorate 
+5

Bạn cũng nên thêm cờ '--oneline' để tận dụng tối đa bất động sản trên màn hình của mình. – cmaster

2

bạn cũng có thể cung cấp cho một thử này:

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

Và sử dụng bí danh này trong tập tin .gitconfig của bạn:

[alias] 
    showparentbranch = rev-parse --abbrev-ref --symbolic-full-name @{u} 

Sau đó, bạn có thể chỉ cần gọi:

git showparentbranch 

Thử nghiệm trên phiên bản git 2.10.2.windows.1

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