2012-10-01 18 views
10

Tôi đã tải một kho lưu trữ vớiLệnh "đặt lại" cho kho lưu trữ nhân bản git là gì?

git clone <address> 

tôi đã thực hiện một số thay đổi và đã chỉnh sửa một số tập tin, bây giờ tôi muốn loại bỏ tất cả mọi thứ và chỉ cần chắc chắn rằng những gì tôi có trên đĩa không có gì khác hơn so với điều khiển từ xa ban đầu là phiên bản của codebase: lệnh đúng là gì?

Trả lời

11

Giả sử điều khiển từ xa được gọi là gốc

git reset --hard HEAD 
git checkout origin/master 
git branch -D master 
git checkout -b master 

Điều này không là:

  1. (Tùy chọn nếu tình trạng git nói không tập tin sửa đổi) Bỏ bất kỳ tập tin sửa đổi trên đĩa (đó là lý do tại sao reset --hard)

  2. Thanh toán chi nhánh chính từ xa (lưu ý: bạn sẽ ở trạng thái “đầu bị đánh cắp”)

  3. Xóa địa phương master chi nhánh (ném đi tất cả thay đổi địa phương của bạn)

  4. Gọi người đứng đầu hiện nay như master chi nhánh mới

Bây giờ bạn có thể muốn làm điều gì đó hơi khác nhau ... tức đừng vứt bỏ những thay đổi của bạn, chỉ cần đặt chúng vào một nhánh khác có tên ...sau khi tất cả bạn không bao giờ biết khi nào bạn sẽ cần đến chúng nữa

git checkout -b my-silly-changes 
git branch -D master 
git checkout -b master origin/master 

Đó lưu những thay đổi hiện tại của bạn trong một chi nhánh địa phương mới gọi là my-silly-changes và sau đó loại bỏ các chi nhánh địa phương cũ gọi master và cuối cùng là tái tạo lại nó từ đầu xa.

+6

Bạn cũng nên thực hiện 'git clean -xfd' để loại bỏ tất cả các tập tin không được kể lại (xây dựng sản phẩm, v.v.) –

+0

không biết gì về điều đó –

+2

Bốn lệnh đầu tiên, trong khi chính xác, không cần thiết. Nếu bạn đang ở trên 'master', chỉ cần' git reset --hard origin/master' sẽ làm tương tự như bốn lệnh. Tuy nhiên, +1 để đề cập đến tùy chọn tạo chi nhánh địa phương. – sleske

0

Nếu bạn chưa cam kết gì, thì git reset --hard là vừa đủ.

Here là tài nguyên tốt giải thích cách đặt lại git với các chế độ khác nhau của nó hoạt động (--hard, --mixed và --soft).

Disclaimer:

git reset --hard là một hoạt động không an toàn. Nó loại bỏ bất kỳ thay đổi chưa được trả nào từ cây đang hoạt động và không thể hoàn tác.

+0

* "Tôi muốn hủy mọi thứ và chỉ cần chắc chắn rằng những gì tôi có trên đĩa không có gì khác với phiên bản gốc từ xa của codebase" * - Phương pháp trên dường như để lại các tập tin trên hệ thống tập tin mà không phải là một phần của bản sao, như 'cấu hình' kịch bản được tạo ra từ' configure.ac' với 'autoreconf'. Hãy để nó cho Git để có một nhiệm vụ đơn giản, và làm cho nó khó khăn để không thể. – jww

1

Nếu bạn chắc chắn bạn muốn loại bỏ tất cả các file, và mất tất cả các thay đổi của bạn, bạn có thể làm (!):

git reset --hard origin/master 

này sẽ thiết lập lại tình trạng của bản sao cục bộ của "bậc thầy "chi nhánh và bản sao làm việc của bạn cho phiên bản cuối cùng mà bạn đã tải xuống từ phía trên (remote gốc).

Lưu ý: Điều này giả định rằng

  • kho thượng nguồn của bạn được gọi là "nguồn gốc" (mặc định cho git clone)
  • bạn đang làm việc trong một bản sao của điều khiển từ xa master chi nhánh

Nếu bạn đang làm việc trong chi nhánh không phải là "chính", điều chỉnh lệnh:

git reset --hard origin/branch1 
-1

Bạn cũng có thể cần phải làm điều gì đó tương tự như:

git branch --set-upstream-to=origin/master master

đâu:

origin/master

là chi nhánh từ xa mà bạn muốn trỏ đến, và

master

là chi nhánh địa phương bạn muốn làm việc từ

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