Làm cách nào để đặt lại kho lưu trữ Git từ xa để xóa tất cả các xác nhận?


164

Làm cách nào tôi có thể đặt lại kho lưu trữ Git từ xa và cục bộ để xóa tất cả các xác nhận?

Tôi muốn bắt đầu mới với Head hiện tại như là cam kết ban đầu.



Tôi không muốn chọn anh đào hoặc làm bất cứ điều gì khác, tôi chỉ muốn xóa tất cả các thay đổi và đặt lại repo công khai. Khi tôi là người dùng Git mới, tôi đã thực hiện một số cam kết sai. Xóa thư mục .GIT không phải là một tùy chọn vì cũng có một kho lưu trữ công khai.
Priyank Bolia

Bạn cũng có thể thực hiện một lực đẩy, vì vậy loại bỏ dir .git thực sự là một tùy chọn.
Sông Lilith

2
chỉ là nitpicking, nhưng "sửa đổi" là một thuật ngữ svn và không có ý nghĩa nhiều trong lịch sử hình cây.
Tamás Szelei

2
@ TamásSzelei "Sửa đổi" là một từ đồng nghĩa hoàn toàn chấp nhận được cho "cam kết". Nó được sử dụng cả trong sách Pro Git (ví dụ ở đây ) và trong trang Git man.
jub0bs

Câu trả lời:


348

Hoàn toàn thiết lập lại?

  1. Xóa .gitthư mục cục bộ.

  2. Tái tạo kho git:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. Đẩy đến máy chủ từ xa, ghi đè. Hãy nhớ rằng bạn sẽ làm phiền mọi người khác khi thực hiện điều này, bạn nên là khách hàng duy nhất.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    

1
nhưng các xác nhận đã biến mất và kho lưu trữ được đặt lại. Chúng ta có thể loại bỏ những tin nhắn trước đó cũng ở phía trước tên tập tin không.
Priyank Bolia

2
Xóa kho lưu trữ từ xa trực tiếp trên GitHub và tạo lại nó ở đó.
Bombe

1
Nên git đẩy - lực lượng thay vì lực đẩy git
William Notowidagdo

6
Nếu bạn không muốn cam kết bất kỳ tệp nào trong "Cam kết ban đầu" của mình, bạn không thể thêm bất kỳ tệp nào và thêm --allow-emptycờ vào cuối git commit -m 'Initial commit'.
raf

2
Sử dụng Git 2.3.2, tôi phải sử dụng git push --force --set-upstream origin masterNhưng tất cả những thứ còn lại đều hoạt động như mô tả
Sébastien Stormacq

6

Đầu tiên, hãy làm theo các hướng dẫn trong câu hỏi này để dẹp mọi thứ thành một cam kết duy nhất. Sau đó thực hiện một cú đẩy mạnh mẽ vào điều khiển từ xa:

$ git push origin +master

Và tùy chọn xóa tất cả các chi nhánh khác cả cục bộ và từ xa:

$ git push origin :<branch>
$ git branch -d <branch>

0

Tôi là bạn, tôi sẽ làm một cái gì đó như thế này:

Trước khi làm bất cứ điều gì xin vui lòng giữ một bản sao (tốt hơn an toàn hơn xin lỗi)

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

Sau khi làm điều đó bạn có thể xóa các chi nhánh khác.

Kết quả: Bạn sẽ có một chi nhánh chỉ với 2 lần xác nhận.

Sử dụng git log --onelineđể xem các cam kết của bạn một cách tối giản và để tìm SHA-1 cho các cam kết!

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.