2013-02-22 39 views
10

Câu hỏi:
Tôi đã thêm một số tệp vào khu vực dàn dựng của mình. Tôi muốn tạm thời lưu thông tin này. Làm thế nào để?Làm thế nào để lưu trạng thái hiện tại của khu vực dàn dựng của tôi?

Bối cảnh:
Đôi khi tôi thực hiện một số phép cấu trúc lại lớn hơn. Nó chỉ thực sự có ý nghĩa để cam kết kết quả hoàn thành.
Trong quá trình tái cấu trúc này, tôi cũng thực hiện một số thay đổi không liên quan mà tôi muốn cam kết độc lập.
Ví dụ: việc tái cấu trúc được đổi tên thành một phương thức. Thay đổi không liên quan đã sửa lỗi chính tả trên một tham số của phương thức khác trong cùng một lớp.
Bây giờ, giả sử tôi đã thêm hầu hết các tệp vào khu vực dàn dựng khi tôi nhận ra rằng tôi đã quên thực hiện một trong những thay đổi không liên quan trước đó.
Việc thêm các tệp vào khu vực dàn dựng cần có thời gian, vì tôi kiểm tra từng tệp để đảm bảo rằng tôi thực sự chỉ cam kết những gì tôi muốn. Vì vậy, chỉ cần loại bỏ tất cả chúng khỏi khu vực dàn dựng không phải là giải pháp.
Những gì tôi muốn làm thay vì:

  1. Lưu trạng thái hiện tại của khu vực dàn
  2. Hủy bỏ tất cả các file
  3. Stage sự thay đổi liên quan tổ chức
  4. Commit sự thay đổi liên quan
  5. Re- áp dụng trạng thái đã lưu vào vùng dàn dựng.

Điều này có thể bằng cách nào đó không?

Giải pháp thay thế sẽ là khả năng của nhiều khu vực dàn dựng, nhưng tôi không nghĩ điều đó là có thể.

+0

Chỉ có một khu vực dàn dựng. Và git không thực sự lưu trữ nó - bạn có thể làm điều đó cho mình. – Reactormonk

+0

bạn probabl muốn ['git stash'] (http://git-scm.com/docs/git-stash) và thực hiện một số thanh toán tương tác/thêm sau đó –

+0

@NevikRehnel: Làm thế nào git stash sẽ bảo toàn công việc mà tôi đưa vào trạng thái hiện tại của khu vực dàn dựng? –

Trả lời

12

Chuỗi các lệnh sau đây nên làm các trick

git commit -m "temporary" # save current stage are as an actual commit 
git commit unrelated_files -m "The other feature" 
git stash # hide the rest 
git rebase -i HEAD~2 # change the order of two last commits 
git reset HEAD^ # rollback the "temporary" commit 
git add . # add everything from that commit back to staging 
git stash pop # and return back all initially unstaged stuff 
+0

Vâng, đó là hoàn hảo. Cảm ơn rất nhiều! :) Và nó hoàn toàn phù hợp với việc sử dụng git của tôi. Tôi làm rất nhiều rebasing anyway. –

2

Bạn chắc chắn cần git stash

này sẽ tiết kiệm được công việc hiện tại của bạn, và để lại thư mục của bạn, nếu như bạn đã làm một thiết lập lại để HEAD. Bây giờ bạn có thể chuyển đổi chi nhánh, thực hiện một số công việc trên một chủ đề khác.

Khi bạn đã sẵn sàng để làm việc trên tính năng của bạn một lần nữa, lại áp dụng những thay đổi của bạn giấu với git stash apply

Bạn có thể kết hợp nhiều ẩn nấp, git stash list sẽ liệt kê chúng, sau đó bạn có thể chọn một Mà để áp dụng, chẳng hạn như git stash apply @{1}

Edit:

Như @ nevik-rehnel nói trong các ý kiến, bạn cũng có thể sử dụng tương tác bổ sung.

Unstage mọi thứ, sử dụng git add -p để hiển thị các thay đổi không liên quan, cam kết, sau đó khôi phục mọi thứ.

+1

Không, điều này là chắc chắn * không * những gì tôi cần. Tôi đang nói về khu vực * dàn dựng *, không phải thư mục làm việc của tôi. Và tôi cũng không muốn thay đổi nhánh của mình. –

+0

Git stash sẽ lưu khu vực dàn dựng của bạn và để lại một thư mục sạch sẽ, sau đó bạn có thể thay đổi tập tin của bạn, làm cam kết không liên quan của bạn, stash áp dụng, hoàn thành công việc của bạn, và cam kết. – Intrepidd

+0

Xem ý chính này để biết ví dụ chi tiết hơn: https://gist.github.com/Intrepidd/d52b7e190aec8cd29854 – Intrepidd

0

Tại sao bạn không thể lưu nó như là một chi nhánh và bắt đầu một chi nhánh mới

0

này dường như làm việc:

  • git commit -m "temp"
  • git stash -u
  • git reset HEAD^
  • git stash lưu "MeepMeep!"
  • stit pop stit git @ {1}
Các vấn đề liên quan