Có cách nào mô phỏng git merge
giữa hai nhánh, nhánh làm việc hiện tại và chủ, nhưng không thực hiện bất kỳ thay đổi nào không?
Tôi thường có mâu thuẫn khi phải làm a git merge
. Có cách nào mô phỏng hợp nhất trước không?
Có cách nào mô phỏng git merge
giữa hai nhánh, nhánh làm việc hiện tại và chủ, nhưng không thực hiện bất kỳ thay đổi nào không?
Tôi thường có mâu thuẫn khi phải làm a git merge
. Có cách nào mô phỏng hợp nhất trước không?
Câu trả lời:
Tôi không nghĩ có một cách mô phỏng những gì sẽ xảy ra cho đến khi bạn thử hợp nhất. Tuy nhiên, nếu bạn chắc chắn rằng đầu ra git status
trống trước khi bạn thực hiện hợp nhất, sẽ khá an toàn nếu chỉ tiếp tục và thử nó. Nếu bạn gặp xung đột, bạn có thể ngay lập tức quay lại trạng thái trước đây:
git reset --merge
Kể từ git 1.7.4, bạn cũng có thể hủy bỏ hợp nhất bằng cách thực hiện:
git merge --abort
(Như thông báo cam kết đã thêm tùy chọn đó giải thích , điều này đã được thêm vào để thống nhất git rebase --abort
và v.v.)
--no-commit
theo quan điểm của tôi thì việc sử dụng dễ dàng hơn nhiều
--no-commit
bạn vẫn thay đổi chỉ mục và cây làm việc, điều này không chính xác "mà không thực hiện bất kỳ thay đổi nào" :) Quan điểm của tôi là khi mọi người hỏi loại này câu hỏi, nói chung là vì họ không biết rằng cách tốt nhất để xem việc hợp nhất sẽ diễn ra như thế nào là thử kết hợp , thường là vì họ không nhận thức được việc trở lại trạng thái trước đây dễ dàng như thế nào nếu có vấn đề
git merge --abort
tương đương với git reset --merge
khi MERGE_HEAD
có mặt", vì vậy, bất cứ điều gì dễ nhớ hơn :)
Bạn có thể sử dụng git merge --no-commit
để ngăn việc hợp nhất thực sự được cam kết và nếu bạn không thích cách hợp nhất diễn ra, chỉ cần đặt lại về đầu ban đầu.
Nếu bạn chắc chắn không muốn hoàn tất việc hợp nhất, ngay cả khi đó là một chuyển tiếp nhanh (và do đó không có xung đột, theo định nghĩa), bạn cũng có thể thêm --no-ff
vào.
git merge --abort
tồn tại - có lẽ bạn có nghĩa là git reset --merge
?
rebase
không có một --abort
cho git merge
.
--no-ff
. Để giữ một hợp nhất ff xảy ra.
--no-ff
là bắt buộc khá nhiều ở đây, vì --no-commit
không dừng những thay đổi nhanh chóng.
Nếu tôi muốn so sánh các thay đổi trên một nhánh chủ đề với chủ, tôi thấy cách dễ nhất và an toàn nhất để thực hiện như sau:
git checkout master
git checkout -b trial_merge
git merge topic_branch
Sau khi hoàn thành hợp nhất, dễ dàng thấy sự thay đổi hợp nhất từ chủ
git diff master
Khi hoàn tất, chỉ cần xóa nhánh Trial_merge
git checkout master
git branch -D trial_merge
Bằng cách này, nhánh chủ không bao giờ thay đổi.
git checkout --detach
và kiểm tra bất cứ điều gì bạn muốn. Sau đó, nếu bạn muốn giữ những thay đổi của mình, hãy làm git checkout -b new_branch
. Và nếu bạn muốn loại bỏ các thay đổi của mình, hãy kiểm tra bất kỳ chi nhánh nào bạn muốn ( git checkout master
).
topic_branch
là rất lớn (có lẽ là trường hợp nếu bạn ở câu hỏi này ở vị trí đầu tiên) thì diff master
đầu ra có thể quá lớn đối với bạn để nhãn cầu nếu hợp nhất sẽ gây ra xung đột.
Tôi sử dụng :
git merge --ff-only
theo tài liệu :
Từ chối hợp nhất và thoát với trạng thái khác không trừ khi CHÍNH hiện tại đã được cập nhật hoặc hợp nhất có thể được giải quyết dưới dạng chuyển tiếp nhanh.
Nó không thực sự là một mô phỏng vì sẽ có một sự hợp nhất nhanh chóng trong trường hợp không có xung đột giữa hai nhánh. Nhưng trong trường hợp có xung đột, bạn sẽ được thông báo và sẽ không có gì xảy ra.
git merge --abort
Gần đây tôi đã có thể sử dụng . Tuy nhiên, điều này chỉ có thể được sử dụng nếu có xung đột hợp nhất. Nếu bạn chắc chắn rằng bạn sẽ không muốn cam kết, thì hãy sử dụng các phương pháp được đề cập khác ở trên.
git merge --abort
. Bạn nên chứng minh câu trả lời của mình trong tương lai bằng cách chỉ định ai đã viết câu trả lời mà bạn đang đề cập.
Tại sao không chỉ tạo một nhánh bỏ đi (git checkout -b) và thực hiện kiểm tra hợp nhất ở đó?
Tôi không biết chính xác nếu đó là trường hợp của bạn , nhưng câu hỏi của bạn nhớ tôi rằng đôi khi tôi bắt đầu một tính năng, tôi cam kết qua nhiều ngày và tôi hợp nhất sự phát triển trên đó nhiều lần.
Vào thời điểm này, tôi mất quyền kiểm soát các tệp chính xác mà tôi đã thay đổi và tôi sẽ chỉ biết điều đó khi tính năng của tôi bị đóng và mã của tôi sẽ phát triển.
Trong trường hợp này, một cách tốt để biết những sửa đổi bạn đã làm (không phải từ các hợp nhất) là sử dụng Sourcetree.
Bạn phải nhấp bằng nút bên phải trên nhánh cơ sở và chọn Diff Against Current
:
Sau đó sourcetree sẽ hiển thị cho bạn tất cả các sửa đổi sẽ được hợp nhất nếu bạn hợp nhất chi nhánh của bạn thành chi nhánh cơ sở.
Tất nhiên, nó sẽ không cho bạn thấy các xung đột, nhưng nó là một công cụ hữu ích trong việc hợp nhất.