2012-03-27 32 views
29

Tôi đã trở lại với một dự án cũ và tôi đã chạy số git status để tìm hiểu điều gì đang xảy ra và tôi nhận thấy quá nhiều nhánh! Tôi muốn làm một số dịch vụ dọn phòng trước khi bắt đầu làm lại việc này nhưng tôi không chắc chi nhánh nào đến từ đó ..GIT - Tôi đã chi nhánh từ đâu?

E.G. "BranchA" có xuất phát từ "phát triển" không? "BranchB" có xuất phát từ "master" hay "branchA" không ??

Tôi có thể trả lời các câu hỏi mẫu ở trên bằng cách nào?

+0

Đã thử 'gitk --all'? – Mat

+0

bản sao có thể có của [Git: Tìm thấy cam kết chi nhánh nào đến từ] (http://stackoverflow.com/questions/2706797/git-finding-what-branch-a-commit-came-from) – Cascabel

+0

Bản sao có thể thực sự là một chút mỏng manh - nó có thể là chính xác những gì bạn muốn cho một số chi nhánh, nhưng có lẽ không bao gồm tất cả mọi thứ. Có lẽ nên liên kết với nó, xin lỗi. – Cascabel

Trả lời

14

Không có câu trả lời chính xác cho điều này, vì các nhánh chỉ đơn giản là trỏ đến các cam kết nhất định trong một DAG. Ví dụ: masterfoo có thể chỉ vào cùng một cam kết; nếu bạn sau đó tạo chi nhánh từ foo, nó có hiệu quả giống như việc tạo chi nhánh từ master.

Điều đó nói rằng, nếu bạn hình dung biểu đồ cam kết (thông qua gitk hoặc một số công cụ lịch sử đồ họa khác), bạn có thể hiểu được vị trí của các điểm chi nhánh trong đồ thị commit.

+0

Nếu bạn sử dụng "ghép" của git, bạn có thể tạo chu kỳ để nó không còn là DAG nữa. Rõ ràng điều này là xấu. :-) (Không ngạc nhiên ... mặc dù nó chủ yếu là "chỉ làm việc" anyway, không phải là tôi đã thử nó.) Tôi nghi ngờ bạn cũng có thể tạo ra chu kỳ với 'bộ lọc-chi nhánh', không phải là tôi đã thử một trong hai. Straighforward hợp nhất dường như từ chối nỗ lực để tạo ra chu kỳ, ít nhất. – torek

1

Bạn có thể sử dụng trình xem hình cây, tôi đang sử dụng gitg để xem các chi nhánh và khác biệt, mặc dù tôi đang sử dụng dòng lệnh cho công việc thực sự hầu hết thời gian.

21

git merge-base cho thấy cam kết rằng là tổ tiên chung của hai chi nhánh.

Sử dụng đơn giản: git merge-base <branch> <branch> thể hiện cam kết chung của hai nhánh.

+4

bạn có thể hiển thị cú pháp của cách gọi này không? – jwfearn

+0

Xem http://git-scm.com/docs/git-merge-base Khi nó nói, bạn cung cấp hai id cam kết để so sánh. Vì vậy, nếu bạn có nhánh master và devel trong một số dự án, 'git merge-base master devel' sẽ cho bạn biết cam kết là tổ tiên chung của hai nhánh này. – patthoyts

0

Gắn bó với quy ước đặt tên và tự khắc phục mọi sự nhầm lẫn.

Khi tạo chi nhánh từ master - cho phép nói, để triển khai tính năng email - bạn có thể đặt tên là master_emailfeature. Sau đó, nếu bạn cần tạo một nhánh phụ từ nhánh này để thực hiện ssl cho các email thì bạn có thể đặt tên nó là master_emailfeature_sslandtls.

Điều này cho thấy rõ chi nhánh nào được tạo ra từ đó chỉ bằng cách nhìn vào tên của chi nhánh.

0

Nếu bạn muốn tìm ra chi nhánh từ xa mà chi nhánh địa phương của bạn bắt nguồn từ, lệnh này có thể làm sáng tỏ.

git remote show origin 

Cuộn xuống cho đến khi bạn nhìn thấy "Nhánh địa phương được cấu hình cho 'git pull':" và danh sách tất cả các nhánh địa phương của bạn được hiển thị và nhánh từ xa sẽ được kết hợp với nhau.

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