2012-06-12 18 views
18

Giả sử tôi có chi nhánh phát triển. Tôi tạo ra một chi nhánh tính năng từ này để phát triển một tính năng. Khi tính năng được phát triển, tính năng này được hợp nhất trở lại phát triển. Khá nhiều như đưa ra ở đây:Đóng băng chi nhánh Git

enter image description here

Có cách nào tôi có thể đóng băng các chi nhánh tính năng để không cam kết có thể tiếp tục được thực hiện với nó?

Lý do không xóa hoàn toàn chi nhánh là để xem lịch sử vẫn có thể hiển thị nhánh đối tượng và nếu cần chỉnh sửa đối tượng địa lý thì có thể ai đó tạo chi nhánh mới từ cam kết cuối cùng của tính năng trước đó.

Trả lời

14

Christopher đúng, gắn thẻ sẽ giúp bạn thực hiện việc này. Tôi cũng khuyên bạn nên xóa tên chi nhánh để khiến người khác khó kiểm tra chi nhánh hơn và thực hiện chỉnh sửa.

Thứ nhất, sáp nhập các chi nhánh vào phát triển

git checkout develop 
git merge --no-ff feature_1 

Sau đó, kiểm tra các chi nhánh

git checkout feature_1 

Sau đó tạo một thẻ, với nhận xét.

git tag -a -m "Freezing a feature branch that fixes.." feature_1_frozen 

Sau đó, xóa các chi nhánh

git checkout develop 
git branch -d feature_1 

Sau khi làm điều này, bạn sẽ không có khả năng kiểm tra các chi nhánh theo tên. Thay vào đó, bạn sẽ có thể kiểm tra thẻ theo tên, điều này sẽ đưa bạn vào trạng thái đầu tách rời sẽ ngăn chặn các thay đổi đối với mã.

Bây giờ để kết nối mọi thứ và đồng bộ hóa với nguồn gốc ...

Đẩy cập nhật và thẻ mới

git push --tags origin develop 

Xóa chi nhánh tính năng từ xa

git push origin :feature_1 
+0

Điều đáng chú ý là điều này sẽ chỉ xóa nó khỏi kho lưu trữ cục bộ của bạn. Để ngăn người khác lấy nó trong repo địa phương của họ, bạn cần xóa nó trên điều khiển từ xa với 'git push : feature_1'.Bạn chắc chắn muốn một tên thẻ bao gồm tên chi nhánh trong trường hợp này, nếu không bạn sẽ gây nhầm lẫn tại một thời điểm nào đó trong tương lai khi ai đó muốn tìm trạng thái này. – Christopher

+0

Vì vậy, để rõ ràng, lệnh xóa chi nhánh không xóa các cam kết khỏi nhánh đó, nó chỉ xóa tên chi nhánh? – millie

+0

Chi nhánh là con trỏ đến các cam kết cụ thể. Có một lời giải thích tốt ở đây: http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is. Miễn là thẻ cam kết tồn tại trong ví dụ của gjcamann, bạn sẽ có thể đạt đến trạng thái cam kết đó. Tôi không chắc chắn về việc xóa chi nhánh như tôi nghĩ nó sẽ gây nhầm lẫn, "Đợi đã, nhánh đó gọi là gì? Hmmm. Không thể nhớ tên thẻ. Đó là hai tháng trước. Tốt hơn là đi đào." nhưng đó chỉ là sở thích cá nhân. Việc bạn xóa chi nhánh từ xa có phụ thuộc vào mức độ thoải mái và quy trình làm việc của bạn hay không. – Christopher

8

Chỉ cần thẻ nó.

git tag -a frozen -m "Feature branch frozen here." 
git push <remote> frozen 

Chắc chắn, ai đó có thể đến sau cùng và đẩy đến chi nhánh, nhưng thẻ không nên thay đổi trừ khi nó buộc phải gạt. Bạn có thể định cấu hình điều khiển từ xa của mình để từ chối lực đẩy nếu bạn lo lắng về điều đó hoặc even sign the tags with a GPG key to ensure authenticity.

Lấy trạng thái của chi tiết tính năng khi được cố định đơn giản là git checkout frozen. Các nhà phát triển có thể chi nhánh từ thời điểm này tại sẽ sử dụng một lệnh: git checkout -B <new_branch> frozen.

+0

Chỉ cần được rõ ràng, nếu ai đó đi cùng và làm cho các cam kết trên cành "đóng băng", nó tầm thường để ném những thay đổi đó đi và đặt nó trở lại nơi nó được cho là. Chỉ cần 'git reset --hard frozen' khi đang ở trên nhánh. – wadesworld

0

Tôi đang sử dụng bảng điều khiển "Git Bash" để đóng băng nhánh:

Không có Git Bash?

Dưới đây là làm thế nào để cài đặt và sử dụng Git Bash console:

tham khảo:

https://github.com/msysgit/msysgit/releases/

https://help.github.com/articles/set-up-git/

Làm thế nào để đóng băng một chi nhánh

git checkout {branch-to-keep-alive} 
git merge --no-ff {branch-to-freeze} 

Nếu git yêu cầu thư hợp nhất, hãy nhập thư, sau đó sử dụng phím [Esc] rồi nhập ": wq" để lưu và thoát.

Bạn phải đến phòng thu trực quan và đảm bảo rằng bạn có thể xây dựng giải pháp thành công (với {branch-to-keep-alive}). Công ước

git checkout {branch-to-freeze} 

git tag -a -m "{your-description}" {tag-for-the-branch-to-freeze} 

: tạo thẻ như thế này: {chi nhánh-name} _frozen

git checkout {branch-to-keep-alive} 

git branch -d {branch-to-freeze} 

git push --tags origin {branch-to-keep-alive} 

git push origin :{branch-to-freeze} 

Làm thế nào để hợp nhất một chi nhánh với tổng thể:

git checkout {your-working-branch} 

Git merge master

Mở và giải quyết xung đột hợp nhất nếu có. Luôn xây dựng lại toàn bộ mọi thứ.

git checkout master 
git merge development 

Sẽ không có bất kỳ xung đột nào và mọi thứ được thiết lập để tiếp tục.

Git Bash Console:

enter image description here