2011-07-20 34 views
10

Tôi đang cố gắng đẩy các thay đổi mới, nhưng tôi có một tệp bị xung đột. Sau khi cố gắng đẩy, tôi nhận được lỗi sau:Git bảo tôi kéo, sau đó cam kết, sau đó kéo?

Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

Ok, vì vậy chúng tôi cần sử dụng git pull. tôi cố gắng sử dụng git pull và sau đó tôi nhận được lỗi này:

error: Your local changes to the following files would be overwritten by merge: 
    db/profile_edit.php 
Please, commit your changes or stash them before you can merge. 

Tuy nhiên, khi tôi cố gắng để thực hiện, tôi quay trở lại các lỗi đầu tiên. Tôi nên làm gì? Những thay đổi trên repo từ xa mới hơn so với những thay đổi trên máy cục bộ của tôi. Vì vậy, làm thế nào để tôi mở nó ra với một công cụ khác và thực hiện các thay đổi và sau đó nói với git rằng tôi đã thực hiện thay đổi vì vậy nó sẽ cho phép tôi đẩy thay đổi?

Trả lời

23

Cố gắng làm

$ git pull --rebase 

Để kéo thay đổi từ xa trước khi bạn, và sau đó cam kết. Và xem nó có hoạt động không.

Nếu điều này không làm việc, hãy thử này để thay thế:

$ git stash 
$ git pull --rebase 
$ git stash pop 

Để lưu thay đổi của bạn trên stash, áp dụng từ xa cam kết trong công việc kho của bạn, và sau đó áp dụng các thay đổi (lưu vào stash) bên trong của bạn kho lưu trữ công việc một lần nữa.

8

Trước tiên, tôi nghĩ nếu bạn đã đến git add thì git commit, repo địa phương của bạn sẽ đủ sạch sẽ để thực hiện git pull.

Tuy nhiên, nếu có thể có thay đổi bạn không muốn cam kết cho đến khi bạn thấy điều gì đã xảy ra ở thượng nguồn, bạn có thể sử dụng git stash. Nó sẽ tạm thời dọn dẹp thư mục làm việc của bạn và lưu các thay đổi của bạn, vì vậy bạn có thể kéo (tôi sẽ giới thiệu git pull --rebase để tránh các điểm hợp nhất - nhưng đó là vấn đề về sở thích cá nhân). Một khi bạn đã thay đổi thượng lưu kéo, bạn có thể nhận được sửa đổi địa phương của bạn trở lại bằng cách sử dụng git stash pop. Sau khi bạn dọn dẹp xung đột và loại bỏ các thay đổi không cần thiết, bạn có thể thêm, cam kết, sau đó cuối cùng đẩy.

+0

+1, giải thích tốt đẹp – sha256

5

Bạn đang bối rối với các lệnh.

git commit lưu các thay đổi vào cơ sở dữ liệu git của git pull mang xa cam kết vào repo của bạn

Bạn đang cố gắng kéo với những thay đổi không bị giam, vì vậy git được yêu cầu bạn cam những đầu tiên (hoặc git stash chúng đi) để nó có thể hợp nhất các thay đổi cục bộ của bạn với các thay đổi từ xa.

Các vấn đề liên quan