2011-10-08 26 views
8

luồng công việc của tôi:Bất kỳ gui cho git merge (w squash)?

  • chi nhánh từ vị thầy
  • làm việc tại chi nhánh của tôi, cam kết thường xuyên (100)
  • khi công việc được thực hiện trong ngành của tôi, kết hợp tổng thể thành chi nhánh của tôi, giải quyết tất cả các cuộc xung đột.
  • MÃ ĐÁNH GIÁ LÚC NÀO trước khi sáp nhập trở lại để làm chủ

Đối MÃ ĐÁNH GIÁ, tôi cần phải hiển thị sự khác biệt giữa hai đầu và squash/tổ chức cam kết của tôi (trong khoảng 5 cam kết). GUI tốt nhất (nền tảng chéo là gì?) Cho tác vụ này?

+1

tôi nghi ngờ rằng bạn không cần hiển thị sự khác biệt giữa hai nhánh, bởi vì nếu có nhiều cam kết hơn được thực hiện trên tổng thể giữa việc hợp nhất và xem xét, bạn muốn chúng bị loại trừ. Có lẽ tốt hơn là chỉ hiển thị các thay đổi được giới thiệu trên chi nhánh của bạn, không bao gồm bất kỳ thay đổi nào được giới thiệu trên chính. Sau đó, bạn có thể hợp nhất bất kỳ lúc nào, thay vì phải thực hiện ngay trước khi xem xét. –

Trả lời

9

Nó phụ thuộc vào hệ điều hành của bạn (git Tower, trên MacOs chẳng hạn, là một giao diện đẹp đặc biệt nhưng không cung cấp bất kỳ tính năng cụ thể nào cho quá trình rebase tương tác). On Windows, there doesn't seem to be any GUI cho tính năng đó.

Cách đơn giản nhất vẫn là một sự tham gia không có giao diện, nơi bạn có thể chạy một

git rebase --interactive --autosquash 

vì bạn cam kết với cam kết thông báo bắt đầu với! Squash (khi những cam kết trung gian là về nhiệm vụ giống nhau)
Xem " Trimming GIT Checkins/Squashing GIT History ".

+0

Lệnh này có vĩnh viễn đè bẹp các cam kết với nhau trong lịch sử dự án hay chỉ hiển thị chúng theo cách đó cho mục đích đánh giá? –

+1

@JonathanHartley Nó sẽ đè bẹp các cam kết, nhưng bạn có thể thiết lập lại một khi bạn không có nhu cầu cho rằng cam kết đè bẹp. – VonC

0

Trên Linux, hai GUI yêu thích của tôi cho git là gitgmeld. Để có được sự khác biệt chính xác cho việc xem xét mã trong trường hợp của bạn, hãy khởi động gitg và tìm commit mới nhất trong master mà bạn đã hợp nhất (quan trọng là bạn không muốn phân biệt đối với người chủ hiện tại trong trường hợp chủ đã nâng cao kể từ lần cuối bạn hợp nhất). Sao chép SHA1 này và đặt nó vào bạn git difftool:

git difftool -t meld <SHA1> 

Để thiết lập nó, do đó bạn không cần phải chỉ định meld như difftool mọi thời gian, chỉ cần đặt nó trong cấu hình:

git config --global diff.tool meld 
0

Eclipse có thể làm phần so sánh. Bạn có thể nhấp chuột phải vào dự án và chọn

Team->Advanced->Synchronize With...->(branch you want to compare against) 

Điều đó cho bạn thấy sự khác biệt giữa 2 nhánh. Tuy nhiên, không phải git hay git GUI nào tôi biết đều hỗ trợ các commit mà IMHO quá xấu.

Vì vậy, tôi sẽ chỉ làm một (trường hợp tôi đã 3 cam kết tôi muốn bí)

git rebase --interactive HEAD~3 

.

2

Đầu ra của bất kỳ lệnh 'git diff' nào có thể được hiển thị trong một công cụ GUI sử dụng lệnh 'git difftool'.

Thứ nhất, 'diff' lệnh chúng ta muốn: Hiển thị các diffs tích lũy được giới thiệu bởi mỗi cam kết về 'mybranch' vì nó tách ra từ 'thầy' sử dụng:

git diff master...mybranch 

hoặc

git diff master...HEAD 

Lưu ý rằng điều này không bao gồm bất kỳ cam kết nào đã xảy ra trên trang chủ trong thời gian chờ đợi, đó có thể là những gì bạn muốn nếu bạn đang xem xét mybranch.

Nếu mybranch là người đứng đầu hiện tại của bạn, thì đây có thể được viết tắt:

git diff master... 

Git sẽ ăn đầu ra từ lệnh diff thành một trong những danh sách khoảng tám công cụ GUI được biết đến, sử dụng 'git difftool'. Tôi sử dụng kdiff3 trên OSX, và trong quá khứ tôi đã sử dụng nó một cách hạnh phúc trên Linux. Tôi thích kdiff3 bởi vì nó cho phép tôi thực hiện các phép trộn 3 chiều khi được yêu cầu, và nó cho phép tôi chỉnh sửa đầu ra của việc hợp nhất theo cách thủ công cũng như chỉ chọn các khối để sử dụng.

Cài đặt kdiff3 đầu tiên, sau đó thêm liên kết tượng trưng vào nó trên PATH của bạn. Đối với tôi, đó là:

ln -s /Applications/kdiff3.app/Contents/MacOS/kdiff3 /usr/local/bin/kdiff3 

Sau đó nói với git mà bạn muốn sử dụng KDiff3 như công cụ diff GUI của bạn:

git config --global merge.tool kdiff3 

Sau đó xem diffs của bạn trong đó:

git difftool master... 
Các vấn đề liên quan