2017-02-07 30 views
6

Tôi đã làm dự án của mình trong khi tại một thời điểm nào đó tôi phát hiện ra rằng một điều đã ngừng hoạt động. Tôi cần tìm kiếm trạng thái mã của mình khi nó hoạt động chính xác, vì vậy tôi đã quyết định sử dụng git checkout (vì tôi muốn kiểm tra một thứ gì đó). Và vì vậy tôi đã làmGit checkout - chuyển trở lại HEAD

git checkout SHA 

vài lần trong khi đi trở lại điểm từ mà tôi không thể đi đến HEAD, đầu ra là như sau:

git checkout SHA-HEAD 

error: Your local changes to the following files would be overwritten by checkout: 
    [list of files] 
Please, commit your changes or stash them before you can switch branches. 
Aborting 

tôi khá nhiều, chắc chắn tôi CHƯA đã thay đổi bất cứ điều gì. Lệnh

git checkout master 

cho cùng một đầu ra.

Có cách nào để quay lại HEAD không?

Cách an toàn để "nhảy qua" lịch sử cam kết là gì?

+0

Nếu bạn không muốn giữ lại những thay đổi 'git -f' sạch sẽ làm sạch tất cả các file được theo dõi. Sau đó, thanh toán để làm chủ – gmuraleekrishna

+0

Thông báo 'lỗi: ...' có nghĩa là bạn — hoặc một cái gì đó bạn đã làm, có lẽ gián tiếp— * đã * thay đổi các tệp. Bạn có thể yêu cầu Git loại bỏ hoặc ghi đè các thay đổi này hoặc sử dụng 'git status' và/hoặc' git diff' để xem chính xác, thay đổi. Nó có thể đơn giản như một số loại sửa đổi dòng kết thúc, hoặc một số lệnh chạy trong nền đã ghi vào một tệp. (Ngoài ra: "quay trở lại HEAD" không có ý nghĩa trong Git, như bạn * luôn luôn * trên HEAD: 'HEAD' nghĩa đen là" cam kết hiện tại ". ​​Bạn có thể * thay đổi * HEAD, sau đó bạn vẫn còn trên HEAD , chỉ cần một HEAD khác. Đây là ... khó để cụm từ. :-)) – torek

+1

Git được nạp với các cơ chế, do đó, đây là hai: 'git reset --hard HEAD' có nghĩa là" đặt lại chỉ mục và work-tree để khớp HEAD ", tức là, vứt bỏ những thay đổi. Hoặc: 'git checkout -f master' có nghĩa là" thay đổi HEAD thành 'master', ngay cả khi điều đó có nghĩa là vứt bỏ một số công việc": '-f' có nghĩa là" force ". – torek

Trả lời

11

Bạn có thể stash (lưu thay đổi trong hộp tạm thời), sau đó quay lại master HEAD nhánh.

$ git add . 
$ git stash 
$ git checkout master 

Chuyển Qua cam kết lại và Forth:

  • Tới một cụ commit-sha.

    $ git checkout <commit-sha> 
    
  • Nếu bạn có thay đổi chưa được cam kết ở đây, bạn có thể thanh toán chi nhánh mới, Thêm, Cam kết, Đẩy chi nhánh hiện tại sang điều khiển từ xa.

    # checkout a new branch, add, commit, push 
    $ git checkout -b <branch-name> 
    $ git add . 
    $ git commit -m 'Changes in the commit' 
    $ git push origin HEAD  # push the current branch to remote 
    
    $ git checkout master   # back to master branch now 
    
  • Nếu bạn có những thay đổi trong cụ thể cam kết và không muốn giữ những thay đổi, bạn có thể làm stash hoặc reset sau đó kiểm để master (hoặc bất kỳ chi nhánh khác).

    # stash 
    $ git add -A 
    $ git stash 
    $ git checkout master 
    
    # reset 
    $ git reset --hard HEAD 
    $ git checkout master 
    
  • Sau khi kiểm tra ra phạm cụ thể nếu bạn không có sự thay đổi không bị giam sau đó, chỉ cần trở lại master hoặc other chi nhánh.

    $ git status   # see the changes 
    $ git checkout master 
    
    # or, shortcut 
    $ git checkout -  # back to the previous state 
    
+0

Điều đó giải quyết được vấn đề của tôi - một phần. Tôi vẫn cần biết cách nhảy qua các cam kết qua lại mà không có hậu quả. – asdfgh

+1

@ rbraun, tôi đã chỉnh sửa câu trả lời của tôi cho thấy cách bạn có thể nhảy qua các cam kết qua lại. –

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