2011-08-27 36 views
70

Nếu bạn muốn di chuyển một cam kết đến khu vực dàn dựng - đó là uncommit nó và di chuyển tất cả các thay đổi trong đó vào khu vực dàn dựng (có hiệu quả đặt các chi nhánh trong tiểu bang mà nó đã có đượ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? Gần nhất mà tôi biết làm thế nào để sao chép tất cả các tập tin đã được thay đổi trong cam kết ở một nơi khác, thiết lập lại các chi nhá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 dàn dựng,, Logged di chuyển tất cả các tệp được sao chép trở lại vào kho lưu trữ và sau đó thêm chúng vào vùng dàn dựng. 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 là chỉ cần hoàn tác các cam kết và di chuyển của nó thay đổi vào khu vực dàn dựng. Nó có thể được thực hiện? Và nếu vậy, làm thế nào?Làm thế nào để bạn di chuyển một cam kết đến khu vực dàn trong git?

Trả lời

132
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 thay đổi trong khu vực dàn dựng.

Có một số sơ đồ tiện dụng trong git-reset docs

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 
+15

Nếu đây làm gì, hãy thử 'git reset ĐẦU --soft ~ 1' có nghĩa là điều tương tự nhưng cũng hoạt động trên Windows. –

+5

Để làm rõ, dấu ngã và dấu mũ có nghĩa là những thứ khác nhau trong các phiên bản git. HEAD ~ 1 luôn theo sau người cha/mẹ đầu tiên của một cam kết, mà có thể không phải là những gì bạn muốn nếu nó là một cam kết hợp nhất có nhiều cha mẹ. Về vỏ Windows cmd, bạn chỉ cần thoát khỏi dấu mũ với một dấu sót khác, ví dụ: "git reset --soft HEAD ^^" để quay lại "HEAD ^". Đây hoàn toàn là một tạo phẩm của vỏ Windows cmd, 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. Dấu ngã và dấu vết được giải thích tại http://schacon.github.io/git/git-rev-parse#_specifying_revisions – ahains

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