2012-05-04 38 views
17

Tình hình là như sau:sạch git repo trên Heroku

Chúng tôi có một số dự án mà vẫn tồn tại trên Github và triển khai nó đến Heroku, trong đó có riêng của mình mini-Git. Một số thay đổi đã được áp dụng trực tiếp cho Heroku (kho lưu trữ nhân bản từ Heroku, thực hiện các thay đổi và được đẩy). Trong khi đó, nhánh master trên Github cũng đã đạt được một số thay đổi.

Bây giờ khi tôi muốn đẩy kho lưu trữ chính vào Heroku, hãy đẩy không thành công vì các cam kết trên Heroku không đồng bộ với các cam kết cục bộ.

Tôi không muốn hợp nhất với các thay đổi trên Heroku - Tôi chỉ muốn họ biến mất.

Có cách nào để dọn sạch kho lưu trữ git trên Heroku để đẩy sau đó repo địa phương của tôi ngay từ đầu?

Tôi không muốn hủy ứng dụng và tạo lại ứng dụng vì nó có một số dịch vụ trả phí và tôi chỉ là cộng tác viên.

+4

'heroku chạy bash' đăng nhập bạn vào thư mục ứng dụng sau đó chỉ cần xóa mọi thứ –

Trả lời

36

Bạn chỉ có thể sử dụng cờ -f trong git (đó là cờ git chuẩn) để ép buộc. Xem ghi chú bên trong Dev Center Git doc. Điều này sẽ ghi đè lên những thay đổi bạn đã thực hiện trên Heroku rõ ràng.

3

Nếu đẩy Heroku bạn đang thất bại vì nó không phải là một nhanh về phía trước cam kết, và bạn không cố gắng để làm bất cứ điều gì funky với lịch sử của bạn, nó rất đơn giản:

  1. Đảm bảo rằng kho không Heroku của bạn được định nghĩa là từ xa.
  2. Lấy tất cả điều khiển từ xa.
  3. Hợp nhất kho lưu trữ khác của bạn vào bản sao Heroku địa phương của bạn bằng cách sử dụng chiến lược đệ quy với tùy chọn chiến lược "của họ".

    git merge -X theirs remotes/origin/master 
    
  4. Đẩy với các tùy chọn --force để làm cho một tổ chức phi nhanh về phía trước cam kết kho Heroku thượng nguồn của bạn.

Mặt khác, nếu bạn thực sự cố gắng thanh lọc lịch sử, bạn có một số tùy chọn khác.

  • Xóa tất cả trừ lần commit đầu tiên trong lịch sử của bạn (dễ nhất).

    git reset --hard $(git log --pretty=oneline | tail -n1 | cut -d ' ' -f1) 
    git push --force 
    
  • Tạo empty master branch.
  • Sử dụng git-filter-branch.

Cá nhân, tôi khuyên bạn nên giữ lịch sử của mình và khắc phục sự cố chuyển tiếp nhanh là phương pháp hay nhất, nhưng bạn chắc chắn có các tùy chọn nếu bạn muốn sửa đổi lịch sử của mình một cách tích cực. Git rất linh hoạt trong vấn đề đó.

2

Bạn cũng có thể chỉ cần sử dụng hệ thống phiên bản ứng dụng của heroku. Đi tới "Hoạt động" bạn có toàn bộ lịch sử của dự án: quay trở lại hoạt động đầu tiên và repo phải được dọn dẹp hoàn toàn, quay lại trạng thái của nó khi ứng dụng ban đầu được tạo trên Heroku.

+0

Điều đó không hoạt động:'! [từ chối] master -> master (không nhanh về phía trước) ' – mgPePe

+0

Tôi không biết, đây là vấn đề của Heroku mà họ phải giải quyết. Nhưng ... bạn có đang sử dụng giao diện web hay dòng lệnh không? Hãy thử sử dụng giao diện web ... – Aerendir

18

Cài đặt Heroku Repo plugin và sử dụng nó để đặt lại repo git từ xa.

Đầu tiên xóa các repo git trên server:

> cd /my-project/ 
> heroku plugins:install heroku-repo 
> heroku repo:reset 

Sau đó tái khởi git repo địa phương của bạn bằng cách xóa và tái tạo nó:

> cd /my-project/ 
> rm -rf .git 
> git init 
> heroku git:remote -a <appname> 

đâu <appname> là tên của ứng dụng của bạn trong Heroku .

2 repos (nội bộ và từ xa) giờ đây sẽ trống và đồng bộ hóa.

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