Hợp nhất Git cho phép chúng tôi tiến nhanh về phía trước và không có quá trình hợp nhất chi nhánh nhanh về phía trước. Bất kỳ ý tưởng nào khi sử dụng tính năng hợp nhất chuyển tiếp nhanh và khi nào thì không sử dụng tính năng hợp nhất chuyển tiếp nhanh?Chuyển tiếp nhanh Git VS không hợp nhất nhanh về phía trước
Trả lời
Tùy chọn --no-ff
hữu ích khi bạn muốn có khái niệm rõ ràng về chi nhánh tính năng của mình. Vì vậy, ngay cả khi trong khi chờ đợi không có cam kết, FF là có thể - bạn vẫn muốn đôi khi có mỗi cam kết trong dòng chính tương ứng với một tính năng. Vì vậy, bạn xử lý một chi nhánh tính năng với một loạt các cam kết như một đơn vị duy nhất và hợp nhất chúng thành một đơn vị duy nhất. Đó là rõ ràng từ lịch sử của bạn khi bạn làm tính năng sáp nhập chi nhánh với --no-ff
.
Nếu bạn không quan tâm về điều đó - bạn có thể có thể lấy đi với FF bất cứ khi nào có thể. Vì vậy, bạn sẽ có cảm giác giống như svn hơn về công việc.
Ví dụ, tác giả của article này cho rằng --no-ff
lựa chọn nên là mặc định và lập luận của ông gần mà tôi nêu ở trên:
Hãy xem xét tình hình nơi một loạt các cam kết nhỏ trên "tính năng" chi nhánh chung tạo một tính năng mới: Nếu bạn chỉ cần "git merge feature_branch" không có --no-ff
, "không thể nhìn thấy từ lịch sử Git mà các đối tượng commit cùng nhau đã thực hiện một tính năng - bạn sẽ phải đọc tất cả các thông điệp tường trình. Hoàn nguyên toàn bộ tính năng (tức là một nhóm cam kết), là một nhức đầu thực sự [nếu --no-ff
không được sử dụng], trong khi nó được thực hiện dễ dàng nếu cờ --no-ff
được sử dụng [vì nó là j chúng tôi một cam kết]. "
Và chuyển tiếp nhanh là điều tuyệt vời khi bạn có một bộ sưu tập các chi nhánh có liên quan chặt chẽ đến bây giờ và sau đó bạn muốn di chuyển cùng nhau. Không phải tất cả các hợp nhất đều là các sự kiện lịch sử thực sự. – Cascabel
Tại sao duy trì một số chi nhánh sau đó? Nếu chúng liên quan chặt chẽ - tại sao không làm mọi thứ trên một nhánh đơn lẻ? –
Liên quan chặt chẽ không có nghĩa là giống hệt nhau. Bên cạnh đó, quy trình làm việc không phải lúc nào cũng gọn gàng. Bạn không phải lúc nào cũng thực hiện các cam kết mà bạn nghĩ rằng bạn sẽ làm, bạn không phải lúc nào cũng chi nhánh từ nơi tốt nhất. Có lẽ bạn bắt đầu một vài tính năng từ một nơi, bắt đầu làm việc trên một trong số họ, nhận ra nó là chung chung, và nhanh chóng chuyển tiếp một trong những khác với nó trước khi phân kỳ. – Cascabel
Có thể cũng là người ta có thể muốn có các ngành chức năng cá nhân nơi mã chỉ được đặt vào cuối ngày. Điều đó cho phép theo dõi sự phát triển chi tiết hơn.
Tôi sẽ không muốn gây ô nhiễm phát triển chính với mã không hoạt động, do đó làm --no-ff có thể chỉ là những gì người ta đang tìm kiếm.
Như một lưu ý phụ, có thể không cần phải thực thi mã làm việc trên một nhánh được cá nhân hóa, vì lịch sử có thể được viết lại git rebase -i
và buộc trên máy chủ miễn là không có ai khác đang làm việc trên cùng một chi nhánh đó.
Tôi có thể đưa ra một ví dụ thường thấy trong dự án.
Ở đây, --no-ff
(ví dụ: true merge) tạo một cam kết mới với nhiều bậc cha mẹ và cung cấp theo dõi lịch sử tốt hơn. Nếu không, --ff
(ví dụ: fast-forward merge) theo mặc định.
$ git checkout master
$ git checkout -b newFeature
$ ...
$ git commit -m 'work from day 1'
$ ...
$ git commit -m 'work from day 2'
$ ...
$ git commit -m 'finish the feature'
$ git checkout master
$ git merge --no-ff newFeature -m 'add new feature'
$ git log
// something like below
commit 'add new feature'
commit 'finish the feature' // => commit created at merge with proper message
commit 'work from day 2'
commit 'work from day 1'
$ gitk // => see details with graph
$ git checkout -b anotherFeature // => create a new branch (*)
$ ...
$ git commit -m 'work from day 3'
$ ...
$ git commit -m 'work from day 4'
$ ...
$ git commit -m 'finish another feature'
$ git checkout master
$ git merge anotherFeature // --ff is by default, message will be ignored
$ git log
// something like below
commit 'work from day 4'
commit 'work from day 3'
commit 'add new feature'
commit 'finish the feature'
commit ...
$ gitk // => see details with graph
(*) Lưu ý rằng đây nếu chi nhánh newFeature
được tái sử dụng, thay vì tạo ra một chi nhánh mới, git sẽ phải làm việc kết hợp với --no-ff
anyway. Điều này có nghĩa là hợp nhất chuyển tiếp nhanh không đủ điều kiện.
- 1. git bị từ chối đẩy không nhanh về phía trước
- 2. EGit: Làm cách nào để ngăn việc hợp nhất nhanh về phía trước?
- 3. Triển khai để Heroku với git tiếp tục bị từ chối vì nhanh về phía trước
- 4. git rebase và git push: không nhanh về phía trước, tại sao lại sử dụng?
- 5. video html5: nhanh nhất về phía trước và chuyển động chậm chậm nhất?
- 6. "Git đẩy các bản cập nhật không nhanh về phía trước đã bị từ chối" nghĩa là gì?
- 7. git pull --rebase upstream & git push origin không từ chối chuyển tiếp nhanh?
- 8. git rebase master sau đó đẩy kết quả chi nhánh gốc trong lỗi không nhanh về phía trước
- 9. Làm thế nào để nhanh chóng về phía trước một chi nhánh từ xa
- 10. chuyển tiếp nhanh bài hát bằng AVAudioPlayer
- 11. Điều gì có nghĩa là Git push không thể nhanh chóng được hợp nhất?
- 12. Git - Tự động chuyển tiếp nhanh chóng tất cả các nhánh theo dõi khi kéo
- 13. Nguồn Forge repo cung cấp cho "từ chối không nhanh về phía trước refs/heads/master" lỗi
- 14. (iphone) thành phần UIImage nhanh (hợp nhất)?
- 15. Hợp nhất hai UIImages nhanh hơn CGContextDrawImage
- 16. git di chuyển một nhánh bắt đầu về phía trước trong cây
- 17. tham chiếu về phía trước bất hợp pháp trong java
- 18. Kịch bản lệnh "Sao chép nhanh nhất" nhanh nhất
- 19. Cách nhanh nhất để đếm số lần chuyển tiếp bit trong một số không dấu int
- 20. Cách bỏ qua tính năng Tìm kiếm nhanh của Firefox và chụp dấu gạch chéo về phía trước
- 21. mysql, ifnull vs coalesce, nhanh hơn?
- 22. hypotenuse nhanh nhất trong javascript?
- 23. khi nào java nhanh hơn C++ (hoặc khi nào JIT nhanh hơn được biên dịch trước)?
- 24. Tuyên bố về phía trước trong C++ là gì?
- 25. bất hợp pháp vấn đề về phía trước Reference java
- 26. Kết quả này là tập hợp chỉ chuyển tiếp, gọi rewind() sau khi di chuyển về phía trước không được hỗ trợ - Zend
- 27. iOS4 - chuyển ngữ cảnh nhanh
- 28. thực hành tốt nhất git để chuyển đổi nhanh chóng giữa các chi nhánh
- 29. Mảng nhanh nhất giải quyết
- 30. Làm thế nào để thiết lập không "tua nhanh" như mặc định khi sử dụng git merge
http://stackoverflow.com/questions/2850369/why-uses-git-fast-forward-merging-per-default/2850413#2850413 trợ giúp? – VonC
Tôi nghĩ rằng một quan điểm thực sự tốt khác có thể được tìm thấy ở đây http://endoflineblog.com/gitflow-considered-harmful –
Cùng một câu hỏi? http://stackoverflow.com/questions/9069061/ –