2013-06-20 37 views
49

Có một điều như vậy là git pull --dry-run để xem làm thế nào công cụ sẽ được sáp nhập trước khi nó messes lên cây làm việc của tôi?Có tùy chọn "git pull --dry-run" trong Git không?

Ngay bây giờ tôi đang làm:

git fetch origin && git merge --no-commit --no-ff 

Tôi không nhìn thấy bất cứ điều gì trong man page cho 'git-pull' liên quan đến nó.

Để làm rõ, tôi chỉ cần nó trong kịch bản lệnh Ant để triển khai xem có xung đột khi thực hiện git pull hay không, sau đó thoát khỏi quá trình xây dựng, không triển khai và để lại cây thư mục giống như trước git pull.

+1

Tại sao có xung đột? Tập lệnh triển khai của bạn có thực hiện các cam kết cục bộ không và nếu có thì tại sao? –

Trả lời

39

Tôi luôn dựa vào khả năng vốn có của Git để lấy lại cho tôi nếu hợp nhất không thành công.

Để ước tính có bao việc hợp nhất có thể xảy ra, bạn có thể bắt đầu như bạn đã làm với:

$ git fetch origin branch # Fetch changes, but don't merge 
$ git diff HEAD..origin/branch # Diff your current head to the fetched commit 

... personal judgement of potential merge conflicts ... 

$ git merge origin/branch # merge with the fetched commit 

Nếu mọi thứ không đi theo kế hoạch, nhìn vào reflog của bạn và thiết lập lại trở lại trạng thái mong muốn của bạn:

$ git reflog 
... 
abc987 [email protected]{0}: merge activity 
b58aae8 [email protected]{1}: fetch origin/branch 
8f3a362 [email protected]{2}: activity before the fetch 
... 
$ git reset --hard HEAD{2} 
+0

Bạn cũng có thể thử điều này vì việc kéo bằng cách nào đó tương tự như việc hợp nhất [http://stackoverflow.com/questions/501407/is-there-a-git-merge-dry-run-option](http://stackoverflow.com/questions/501407/is-there-a-git-merge-dry-run-option) – scireon

+0

'gây tử vong: đối số mơ hồ 'HEAD..origin/branch': bản sửa đổi chưa biết hoặc đường dẫn không có trong cây đang hoạt động.' – Green

15

Bạn có thể nhận được hiệu ứng bạn muốn bằng cách tạo chi nhánh ném mới từ nhánh hiện tại của bạn và thực hiện git pull ở đó. Nếu bạn không hài lòng với kết quả, nhánh gốc vẫn còn nguyên vẹn.

+0

có nghĩa là 'git stash'? – FaithReaper

21

bạn sẽ cần phải lấy đầu tiên để cập nhật nguồn gốc địa phương của bạn/master

git fetch origin 

Sau đó, bạn có thể làm:

git diff --name-only origin/master 

Sẽ liệt kê các tệp đã thay đổi.

git diff origin/master directory_foo/file_bar.m 

Sẽ liệt kê dòng khác biệt theo thư mục tệp_foo/file_bar.m.

+0

Cảm ơn bạn đã tip với cờ chỉ -name – cw24

2

Kể từ khi kéo ngụ ý hợp nhất, tôi muốn chạy với git merge --abort nếu tập lệnh của bạn phát hiện có bất kỳ xung đột và hợp nhất nào không thành công.

+0

Nếu bạn đang làm điều này với một nhánh từ xa (trước tiên hãy tìm một nhánh 'git fetch origin') nó sẽ là' git merge --abort origin/branch' phải không? –

3
# fetch new commits from origin 
$ git fetch 

# check what are the differences and judge if safe to apply 
$ git diff origin/master 

# actually merge the fetched commits 
$ git pull 
+0

Tại sao downvote? Tôi đã thực hiện một 'git diff this-answer/top-answer' và không tìm thấy lỗi đáng kể nào. Hãy xem xét để lại một bình luận khi bạn cam kết một downvote: 'git commit -m 'tại sao bạn downvote, blah blah blah" '. – FaithReaper