2011-12-27 20 views
43

Tôi nhân bản một kho lưu trữ git từ GitHub, thực hiện một số thay đổi và một số cam kết; Tôi đã làm khá nhiều và tất cả đều khá bẩn, vì vậy chúng không phù hợp với yêu cầu kéo. Bây giờ tôi đã tạo chi nhánh cleanchanges từ origin/master, vì vậy nó sạch sẽ và tôi muốn cam kết các thay đổi của tôi ở đó dưới dạng một cam kết với một nhận xét cam kết tốt đẹp.Chuyển sang nhánh khác mà không thay đổi các tệp vùng làm việc

Khi tôi ở trên máy chủ địa phương, tôi muốn chuyển sang số cleanchanges nhưng không thay đổi tệp. Và sau đó tôi có thể cam kết.

Làm cách nào để chuyển đổi các nhánh mà không thay đổi tệp?

Tôi muốn nói rõ: Tôi có tất cả các thay đổi được cam kết trong địa phương master. Không có thay đổi không được cam kết.

Trả lời

45

Chỉnh sửa: Tôi vừa nhận thấy rằng bạn đã nói rằng bạn đã tạo một số cam kết. Trong trường hợp đó, sử dụng git merge --squash để thực hiện một cam kết duy nhất:

git checkout cleanchanges 
git merge --squash master 
git commit -m "nice commit comment for all my changes" 

(Edit:. Câu trả lời sau đây áp dụng nếu bạn có bị giam thay đổi)

Chỉ cần chuyển các chi nhánh với git checkout cleanchanges. Nếu các nhánh tham chiếu đến cùng một ref, thì tất cả các thay đổi không được cam kết của bạn sẽ được giữ nguyên trong thư mục làm việc của bạn khi bạn chuyển đổi.

Thời gian duy nhất bạn có xung đột là nếu một số tệp trong kho lưu trữ khác nhau giữa origin/mastercleanchanges. Nếu bạn vừa tạo chi nhánh, thì không có vấn đề gì.

Như mọi khi, nếu bạn lo ngại về việc mất việc, trước hết hãy tạo bản sao lưu. Git được thiết kế để không vứt bỏ công việc mà không hỏi bạn trước.

+0

Tôi có tất cả các thay đổi đã cam kết. – amorfis

+0

Trong trường hợp đó, hãy xem câu trả lời cập nhật của tôi. –

6

Đặt cược tốt nhất là stash các thay đổi và chuyển nhánh. Để chuyển đổi nhánh, bạn cần một trạng thái sạch. Vì vậy, stash chúng, kiểm tra một chi nhánh mới và áp dụng các thay đổi trên chi nhánh mới và cam kết nó

+2

Bạn không nhất thiết cần "trạng thái sạch" để chuyển nhánh. –

+0

Sự cố là thay đổi đã được cam kết. – amorfis

+1

Sau đó, bạn có thể hợp nhất các thay đổi từ một chi nhánh khác. – vivek85

1

Có vẻ như bạn đã thực hiện thay đổi, cam kết họ làm chủ trên đường đi, và bây giờ bạn muốn kết hợp chúng thành một cam kết duy nhất.

Nếu vậy, bạn muốn rebase cam kết của bạn, tách chúng thành một cam kết duy nhất.

Tôi không hoàn toàn chắc chắn về chính xác những gì bạn muốn, vì vậy tôi sẽ không cám dỗ bạn bằng một tập lệnh. Nhưng tôi đề nghị bạn đọc lên trên git rebase và các tùy chọn cho "squash" ing, và thử một vài điều.

1

Một cách khác, nếu bạn muốn tạo ra một mới cam kết thay vì thực hiện hợp nhất:

git checkout cleanchanges 
git reset --hard master 
git reset cleanchanges 

git status 
git add . 
git commit 

đầu tiên (cứng) thiết lập lại sẽ thiết lập cây làm việc của bạn để giống như các cam kết cuối cùng trong master.

Đặt lại lần thứ hai sẽ đặt HEAD của bạn trở lại vị trí cũ, trỏ tới đầu chi nhánh cleanchanges nhưng không thay đổi bất kỳ tệp nào. Vì vậy, bây giờ bạn có thể thêm và cam kết chúng.


Sau đó, nếu bạn muốn loại bỏ bẩn cam kết bạn kiếm được từ master (và giả sử bạn chưa đẩy họ), bạn có thể:

git checkout master 
git reset --hard origin/master 

Điều này sẽ loại bỏ tất cả các cam kết mới của bạn, trả lại chi nhánh master địa phương của bạn cho cùng một cam kết như một trong kho lưu trữ.

21

Git. Chuyển sang một chi nhánh khác

git checkout branch_name 
+11

điều này sẽ thay đổi các tệp không gian làm việc ngoại trừ các tệp không được theo dõi – SMR

+0

aregato gonsaymasu. cảm ơn bạn. –

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