Làm thế nào để bạn di chuyển một cam kết đến khu vực tổ chức trong git?


143

Nếu bạn muốn di chuyển một cam kết đến khu vực tổ chức - điều đó không phổ biến và di chuyển tất cả các thay đổi trong khu vực đó (đưa chi nhánh vào trạng thái mà nó đã có trước khi cam kết) - bạn làm nó như thế nào? Hay đó là điều mà bạn không thể làm?

Cách gần nhất mà tôi biết cách thực hiện là sao chép tất cả các tệp đã được thay đổi trong cam kết sang một nơi khác, đặt lại nhánh thành cam kết trước khi cam kết mà bạn đang cố gắng di chuyển vào khu vực tổ chức, di chuyển tất cả sao chép các tập tin trở lại vào kho lưu trữ, và sau đó thêm chúng vào khu vực tổ chức. Nó hoạt động, nhưng nó không chính xác là một giải pháp tốt đẹp. Những gì tôi muốn có thể làm chỉ là hoàn tác cam kết và di chuyển sự thay đổi của nó vào khu vực tổ chức. Nó có thể được thực hiện? Và nếu vậy thì thế nào?

Câu trả lời:


267
git reset --soft HEAD^

Điều này sẽ đặt lại chỉ mục của bạn thành HEAD^(cam kết trước đó) nhưng để lại các thay đổi của bạn trong khu vực tổ chức.

Có một số sơ đồ tiện dụng trong các git-resettài liệu

Nếu bạn đang ở trên Windows, bạn có thể cần phải sử dụng định dạng này:

git reset --soft HEAD~1

18
Nếu điều này không làm gì, hãy thử git reset --soft HEAD~1có nghĩa là điều tương tự nhưng cũng hoạt động trên Windows.
Roman Starkov

9
Để làm rõ, dấu ngã và carot có nghĩa là những thứ khác nhau trong các phiên bản git. ĐẦU ~ 1 luôn theo sau cha mẹ đầu tiên của một cam kết, có thể không phải là điều bạn muốn nếu đó là một cam kết hợp nhất có nhiều cha mẹ. Về shell cmd của Windows, bạn chỉ cần thoát carot bằng một carot khác, ví dụ: "git reset --soft HEAD ^^" để quay lại "HEAD ^". Đây hoàn toàn là một tạo tác của shell cmd Windows, vì vậy bạn không cần phải làm điều đó nếu bạn sử dụng GUI git trên Windows. Tilde và carot được giải thích tại schacon.github.io/git/git-rev-parse#_specifying_Vvutions
ahains

Tôi đã thêm một liên kết cho "sơ đồ tiện dụng". Bạn có thể nhanh chóng kiểm tra nếu nó dẫn đến phần bạn muốn nói không? Cảm ơn
Neuron

5

Một cách đơn giản

  1. Các tệp được cam kết cho Khu vực tổ chức

    git reset --soft HEAD^1

  2. Phân đoạn thành UnStage : (sử dụng "git reset HEAD ..." để hủy bỏ giai đoạn)

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

ở đây, * -> tất cả các tệp kết thúc bằng ds.txt để không hiển thị.

Tham khảo các pic dưới đây cho rõ ràng:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.