2013-05-03 24 views
11

Tôi chia đôi một repo trên GitHub và gửi một yêu cầu kéo. Những người duy trì dự án đã từ chối yêu cầu kéo, nhưng chúng tôi đã tìm ra giải pháp tốt hơn trong diễn đàn. Họ hướng dẫn tôi tạo một yêu cầu kéo khác với những thay đổi thay thế. Tuy nhiên, ngã ba của tôi trong kho lưu trữ trên GitHub hiện đã lỗi thời, vì các bản cập nhật đã được đẩy đến repo chính kể từ khi tôi chia tay. Ngoài ra, kho lưu trữ trên GitHub có thêm một cam kết (yêu cầu kéo của tôi cam kết) mà không nên có, bởi vì nó không được chấp nhận như là một phần của dự án.Làm thế nào để cập nhật GitHub chia nhỏ repo khi yêu cầu kéo bị từ chối?

Tôi tìm thấy câu hỏi này: How do I update a GitHub forked repository?

Tôi làm theo các hướng dẫn, cụ thể, tôi đã làm điều này:

git remote add upstream git://github.com/fuel/core 
git fetch upstream 

Đó dẫn:

remote: Counting objects: 93, done. 
remote: Compressing objects: 100% (47/47), done. 
remote: Total 69 (delta 49), reused 40 (delta 20) 
Unpacking objects: 100% (69/69), done. 
From git://github.com/fuel/core 
* [new branch]  1.0/master -> upstream/1.0/master 
* [new branch]  1.1/master -> upstream/1.1/master 
* [new branch]  1.2/develop -> upstream/1.2/develop 
* [new branch]  1.2/master -> upstream/1.2/master 
* [new branch]  1.3/develop -> upstream/1.3/develop 
* [new branch]  1.3/master -> upstream/1.3/master 
* [new branch]  1.4/develop -> upstream/1.4/develop 
* [new branch]  1.4/master -> upstream/1.4/master 
* [new branch]  1.5/develop -> upstream/1.5/develop 
* [new branch]  1.5/master -> upstream/1.5/master 
* [new branch]  1.6/develop -> upstream/1.6/develop 
* [new branch]  feature/better-hmvc -> upstream/feature/better-hmvc 

Được rồi, vì vậy mà dường như tất cả tiền phạt và tốt. Tôi đảm bảo rằng tôi đã ở đúng chi nhánh:

git checkout 1.6/develop 
Already on '1.6/develop' 

Word. Ok, bây giờ cho điều này:

git rebase upstream/1.6/develop 
First, rewinding head to replay your work on top of it... 
Applying: prevent invalid XML node names 

Chờ ... cái gì? Tại sao "ngăn chặn các tên nút XML không hợp lệ" đang được áp dụng? Đó là yêu cầu kéo bị từ chối bởi những người bảo trì dự án. Tôi rõ ràng là mất thuyền trên ý nghĩa thực sự của "rebase." Bây giờ nếu tôi git status nó nói:

# On branch 1.6/develop 
nothing to commit (working directory clean) 

Khi tôi git log, tôi có thể thấy rằng một nửa của vấn đề của tôi đã được giải quyết. Những thay đổi đã được kéo vào dự án kể từ khi tôi chia đôi bây giờ được phản ánh trong số git log của tôi. Tuy nhiên, cam kết gần đây nhất vẫn là "ngăn chặn các tên nút XML không hợp lệ". Làm thế nào để xóa nó?

tôi đã cố gắng kiểm tra ra các cam kết cuối cùng thực hiện để dự án:

git checkout 5f31a4df55e5b6ca1b2092534063a1fce4a32181 

Tuy nhiên, điều này khiến tôi trong tình trạng ĐẦU tách ra. Nó nói rằng tôi có thể nhìn xung quanh, thay đổi và cam kết. Tôi không nghĩ đó là điều tôi muốn làm. Tôi nghĩ rằng tôi muốn HEAD chỉ đến cam kết 5f31a4df55e5b6ca1b2092534063a1fce4a32181. Bước tiếp theo của tôi là gì?

Trả lời

9

git rebase sẽ giữ cam kết của bạn trên chi nhánh của bạn. Vì PR của bạn bị từ chối, bạn muốn xóa nó và làm cho chi nhánh master của bạn giống như upstream/master.

Như vậy, bạn muốn reset!

git checkout master 
git reset --hard upstream/master 

Sau đó, bạn sẽ có cùng một chính xác như luồng đầu tiên. Sau đó, tạo một chi nhánh mới cho PR mới của bạn, vì vậy bạn sẽ không gặp vấn đề này nữa.

+2

Cảm ơn! Tôi muốn lặp lại để nhấn mạnh, bởi vì nó rất hữu ích với tôi: ** "Sau đó, tạo một chi nhánh mới cho PR mới của bạn, do đó bạn sẽ không gặp vấn đề này một lần nữa." ** –

+0

Điều này có vẻ là một chính xác hơn một chút: http://stackoverflow.com/a/8135023/89818 Sự thúc đẩy là cần thiết đối với tôi. – caw

1

Khi câu hỏi này có câu trả lời đã được chấp nhận nhưng tôi sẽ nói với bạn một cách khác vì câu trả lời được chấp nhận không diễn ra tốt trong trường hợp của tôi.

Thi

$git rebase  
There is no tracking information.... 

$git checkout 
Already on 'master' 

$git reset --hard upstream/master 
ambiguous argument upstream/master 

Nếu tình huống như vậy phát sinh sau đó xin vui lòng đi qua các bước sau.

Đặt lại cục bộ HEAD.

$git reset HEAD 

thực hiện các thay đổi tương tự trên máy chủ repo.

$git reset HEAD^ 

Sau đó, nó sẽ hiển thị thông báo về những thay đổi mà bạn đã thực hiện repo forked ban đầu của bạn, liệt kê tất cả các tập tin. Thay đổi không được thay đổi bằng tên tệp.

Bây giờ lùi lại thay đổi bằng:

$git stash 

Bây giờ bạn có thể buộc đẩy những thay đổi này để Sever chỉ repo địa phương và từ xa của bạn trên cùng một HEAD.

$git push origin +HEAD 

Bây giờ bạn đang ở cùng một đại lý mà bạn đang ở thời điểm ngã ba. Bây giờ bạn có thể kéo lại mã mới nhất từ ​​repo gốc.

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