2009-08-20 28 views
229

Tôi đang làm việc trên nhánh git và sẵn sàng cam kết thay đổi, vì vậy tôi đã thực hiện cam kết với thông báo cam kết hữu ích. Sau đó tôi lơ đãng thực hiện những thay đổi nhỏ đối với mã không đáng để giữ. Bây giờ tôi muốn thay đổi chi nhánh, nhưng git cho tôi,git: Chuyển nhánh và bỏ qua bất kỳ thay đổi nào mà không cam kết

error: You have local changes to "X"; cannot switch branches.

Tôi nghĩ rằng tôi có thể thay đổi chi nhánh mà không cam kết. Nếu vậy, làm thế nào tôi có thể thiết lập điều này? Nếu không, làm cách nào để tôi thoát khỏi vấn đề này? Tôi muốn bỏ qua những thay đổi nhỏ mà không cam kết và chỉ thay đổi chi nhánh.

+1

Tôi tin rằng điều này chỉ xảy ra khi họ thay đổi được dàn dựng cho cam nhưng không cam kết? git checkout hoạt động tốt cho việc thay đổi các nhánh nếu bạn chưa dàn dựng các tệp bằng cách sử dụng git add hoặc tương tự. –

+1

Hi Jeremy, Bạn có ý nghĩa gì khi 'dàn dựng'? Buộc người dùng phải cam kết tệp trước khi thay đổi nhánh không có vẻ giống như một quy trình làm việc tuyệt vời. Ví dụ, nếu tôi đang ở trong kho lưu trữ chính và nhanh chóng muốn kiểm tra thứ gì đó trong một chi nhánh. Tôi phải cam kết mã cho chủ đầu tiên, ngay cả khi mã được viết một nửa! Bạn có nói rằng thực sự, bạn có thể thanh toán chi nhánh trong tình huống này không? –

+0

@boyfarrell Bạn có thể sử dụng 'Git stash' để tạm thời lưu các thay đổi mà không cần cam kết. – Howiecamp

Trả lời

297

Bạn cần trạng thái sạch để thay đổi nhánh. Việc thanh toán chi nhánh sẽ chỉ được phép nếu nó không ảnh hưởng đến 'tệp bẩn' (như Charles Bailey nhận xét trong các nhận xét).

Nếu không, bạn nên một trong hai:

  • stash thay đổi hiện tại của bạn hoặc
  • reset --hard HEAD (nếu bạn không nhớ mất đi những thay đổi nhỏ) hoặc
  • checkout -f (Khi chuyển ngành, tiến hành ngay cả khi chỉ số hoặc cây làm việc khác với HEAD. Điều này được sử dụng để vứt bỏ các thay đổi cục bộ.)
+28

"Bạn cần một trạng thái sạch để thay đổi nhánh." chỉ đúng nếu thay đổi nhánh ảnh hưởng đến 'tệp bẩn'. –

+0

Câu trả lời tuyệt vời của VonC và bình luận bởi Charles Bailey –

+6

Đối với phương pháp stash, tôi gõ "git stash save", "git checkout otherbranch", sau đó cuối cùng là "git stash pop". –

7

Nếu bạn đã thực hiện thay đổi đối với các tệp mà Git cũng cần phải thay đổi khi chuyển nhánh, nó sẽ không cho phép bạn. Để hủy thay đổi đang hoạt động, hãy sử dụng:

git reset --hard HEAD 

Sau đó, bạn sẽ có thể chuyển nhánh.

12

Theo dõi,

$: git checkout -f 

$: git checkout next_branch 
90

Nếu bạn muốn loại bỏ những thay đổi,

git checkout -- <file> 
git checkout branch 

Nếu bạn muốn giữ lại những thay đổi,

git stash save 
git checkout branch 
git stash pop 
+8

Thực sự những gì Romerun nói (để được hoàn thành): 'git stash save' (khi đang làm việc branchy) thì' git checkout branchX' làm điều gì đó 'git add/commit -m' vv' git checkout branchY' và 'git stash pop 'để lấy lại stash – Highmastdon

+2

Có lẽ vậy. Tôi có một tình huống mặc dù tôi muốn làm những gì câu trả lời nói, nếu tôi hiểu nó đúng: stash thay đổi, chuyển từ Y sang X, sau đó pop thay đổi và cam kết trên X. –

51

tốt, nó phải là

git stash save 
git checkout branch 
// do something 
git checkout oldbranch 
git stash pop 
+3

Có, stash là toàn cầu, không phải chi nhánh cụ thể, nếu tôi stash pop sau khi chuyển đổi chi nhánh tôi sẽ nhận được stash tương tự như trên các chi nhánh khác (es) –

+4

Nên được lưu ý 'git stash' sẽ mặc định để' git stash save' –

+0

Cảm ơn bạn, nó rất hữu ích cho tôi –

7

Note nếu bạn đã hợp nhất các nhánh từ xa hoặc có cam kết cục bộ d muốn quay trở lại để các HEAD từ xa mà bạn phải làm:

git reset --hard origin/HEAD 

HEAD mình sẽ chỉ đề cập đến các địa phương cam kết/hợp nhất - một vài lần tôi đã quên rằng khi thiết lập lại và kết thúc với "kho của bạn là X cam kết trước .. "khi tôi hoàn toàn có ý định nuke TẤT CẢ thay đổi/cam kết và trở về nhánh từ xa.

0

chuyển sang một chi nhánh mới thay đổi mất:

git checkout -b YOUR_NEW_BRANCH_NAME --force 

chuyển sang một chi nhánh hiện có thay đổi mất:

git checkout YOUR_BRANCH --force 
Các vấn đề liên quan