2015-04-09 13 views
11

Tôi đang làm việc trên một chi nhánh và cần trở lại làm chủ để sửa chữa nhanh chóng vì vậy tôi đã cam kết công việc của mình đang được tiến hành.Làm thế nào để "mở lại" cam kết git cuối cùng?

Bây giờ tôi trở lại chi nhánh và tôi muốn trở lại trạng thái chưa cam kết nhưng tất cả thay đổi của tôi đều được áp dụng và sẵn sàng cam kết (nghĩa là hủy cam kết trước đó nhưng thay đổi của tôi không bị mất và chúng được hiển thị trong git status).

Sửa đổi cam kết trước đó không đủ tốt đối với tôi vì tôi muốn xem các tệp và dòng đã thay đổi (nó giúp dễ dàng hơn khi làm việc với thay đổi của tôi).

Tôi biết git stash sẽ là giải pháp tốt hơn nhưng đã quá muộn. Tôi cũng có xu hướng trộn lẫn (hoặc mất) các cam kết bị vướng víu của tôi vì chúng không liên kết với một chi nhánh.

+2

Thực hiện cài đặt lại nhánh của bạn: sau khi kiểm tra, chạy 'git reset --soft HEAD ^'. Điều đó sẽ làm cho nhánh của bạn trỏ đến cam kết trước khi một nhánh làm phiền bạn, mà không làm thay đổi chỉ mục hoặc cây làm việc. – Jubobs

Trả lời

14

Về cơ bản có hai cách để giải quyết việc này:

  1. Thực hiện thiết lập lại (trên cành master, hoặc bất cứ chi nhánh sai phạm là):

    git reset --soft HEAD~1 
    

    Các HEAD~1 là một người họ hàng địa chỉ như được giải thích here.

  2. Tiếp tục làm việc và thực hiện một sửa đổi:

    git commit --amend 
    

    Trong trường hợp đó bạn giả vờ không có gì xảy ra, việc thêm vào chi nhánh của bạn và gọi lệnh khi bạn đang lên kế hoạch để làm một thực cam kết. Bạn loại ghi đè cam kết cuối cùng với tất cả thay đổi và (tùy chọn) một thư mới.

pro forma: nó thực sự là - như bạn đề cập đến chính mình - tốt hơn để thực hiện một git stash, chỉ nói cho người đó xem câu trả lời này một cách tình cờ và suy nghĩ ở trên là chung thực hành (nó là không phải).

2

Bạn nên sử dụng git reset HEAD~1 (không --hard tùy chọn)

Nó sẽ làm chính xác những gì bạn muốn và ĐẦU ~ 1 có nghĩa là ở đây mà bạn muốn thiết lập lại một cam kết, kể từ đầu (top) của lịch sử .

Điều này sẽ không chạm vào bất kỳ tệp nào trên hệ thống tệp, vì vậy git giờ đây sẽ thấy các tệp đã chỉnh sửa của bạn dưới dạng thay đổi nhưng không được cam kết.

+0

Có lẽ nó là tốt hơn để tuyên bố rõ ràng '--soft'. Tôi biết rất ít khả năng hành vi mặc định sẽ thay đổi, nhưng nếu có, một số câu trả lời có thể đã lỗi thời. –

+0

Đồng ý. Nhưng dù sao đi nữa, nó đã không bị thay đổi trong một thời gian, vì vậy nó có thể tiếp tục được an toàn để sử dụng nó mà không có '' '--soft''' :) –

4

Từ hiểu biết của tôi, bạn muốn hoàn tác cam kết mới nhất cho chi nhánh của mình trong khi vẫn giữ tất cả các thay đổi từ cam kết còn nguyên vẹn và được tổ chức.

Bạn có thể muốn thử sử dụng lệnh reset git như được liệt kê dưới đây:

git reset --soft HEAD^ 

Điều đó sẽ mất mới nhất của bạn cam kết và hủy bỏ nó, trong khi vẫn giữ tất cả các thay đổi dàn dựng.

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