2015-06-26 13 views
16

Tôi đang sửa các xung đột hợp nhất cho các cộng tác viên khác tại dòng lệnh. Vẫn học cách Git làm việc ở đây, vì vậy chịu với tôi ...Yêu cầu kéo trong GitHub không hiển thị xung đột hợp nhất đã được sửa và không hiển thị các cam kết của tôi

Giống như rất ...

git checkout -b otherusersbranch master 
git pull https://github.com/otheruser/myrepo.git otherusersbranch 

.... tìm và khắc phục xung đột

git add . 
git commit -m "fixing merge conflicts" 
git push origin otherusersbranch 
git checkout master 
git merge --no-ff otherusersbranch 
git push origin master 

Khi cuộc xung đột hợp nhất xuất hiện sửa chữa từ dòng lệnh, tôi đang đẩy sự thay đổi vào nhánh của người đóng góp như bình thường. Tuy nhiên, chỉ báo xung đột hợp nhất trong yêu cầu kéo vẫn không thay đổi và tôi không thể thấy các cam kết của mình trong yêu cầu kéo. Tôi đang làm gì sai?

+3

Điểm gốc xuất phát điểm nào? Bạn có chắc là bạn đang đẩy xung đột cố định vào ngã ba người dùng không? Nếu tôi không sai, bạn đang đẩy các tệp đã hợp nhất vào repo gốc. –

+0

Bạn cần gửi Yêu cầu kéo đến repo của người dùng đó. Hoặc người nào khác bạn cần phải làm cho mình như là đóng góp cho repo của mình, do đó bạn có thể đẩy vào repo của mình trực tiếp. – uday

+0

Bạn có thể đăng đầu ra bàn điều khiển khi bạn chạy lệnh 'git push origin otherusersbranch'? – Mike

Trả lời

5

Tôi không nghĩ rằng bạn đang đẩy thành công các thay đổi cho chi nhánh của người dùng. Thử gửi yêu cầu kéo đến nhánh đó. Nếu không, bạn cần cho phép bản thân đẩy trực tiếp.

Từ những gì bạn đã mô tả, bạn chỉ đang đẩy các thay đổi vào chi nhánh của riêng mình, đó là lý do tại sao nó không hiển thị trong lịch sử cam kết.

2

Giả sử bạn đang ở trên nhánh otheruser, bạn chỉ có thể kéo bạn bè của bạn thay đổi bằng cách làm

git pull https://github.com/otheruser/myrepo.git otherusersbranch 

Sau đó, giải quyết xung đột nhập, thêm cam kết và đẩy này để điều khiển từ xa của bạn. Bạn không thể đẩy các thay đổi của mình đến chi nhánh của bạn bè trừ khi anh ấy đã cấp quyền truy cập cho bạn.

Lý tưởng nhất, bạn muốn anh ta đẩy các thay đổi của mình vào repo trung tâm nơi cả hai bạn có thể tìm nạp và làm việc, bạn áp dụng cam kết của mình lên đầu và gửi yêu cầu kéo.

1

Nếu bạn có thể đẩy trực tiếp nhánh của người đóng góp (mà tôi nhận được từ giả định rằng https://github.com/otheruser/myrepo.git là ngã ba và origin là người đóng góp của bạn), thì lý do chỉnh sửa không hiển thị trong yêu cầu kéo từ ngã ba của bạn nguồn gốc là bạn đang đẩy các thay đổi trực tiếp, do đó phá vỡ quy trình yêu cầu kéo.

Để giải thích: Khi bạn mở ra một yêu cầu kéo từ ngã ba của bạn chống lại ngã ba của bạn bè và họ sáp nhập nó, nghĩa là tương đương với của họ đã thực hiện

git fetch <your-fork> master 
git merge <your-fork>/master 

hoặc

git pull <your-fork> master 

tiếp theo

git push <their-fork> master 

Nếu bạn chỉ cần tiếp tục và đẩy tới <their-fork> , trong trường hợp này là nguồn gốc, sau đó bạn đã cơ bản đã thực hiện những gì yêu cầu kéo sẽ làm. Ngoài ra, khi bạn đẩy đến <their-fork> thay vì <your-fork> sau khi sửa các xung đột hợp nhất, github sẽ thấy chính xác cùng một xung đột xung đột như trước trong yêu cầu kéo vì <your-fork> chưa được cập nhật, vì vậy bây giờ bạn đã hợp nhất xung đột với phiên bản "cố định". Khi quá trình PR bị phá vỡ, git không có ý tưởng gì, nhưng git HUB rất khó hiểu (yêu cầu kéo là hoàn toàn dựa trên github - không có khái niệm "yêu cầu kéo" trong chính git).

Cách đơn giản nhất để khắc phục điều này là chỉ cần đóng PR mở, vì bạn đã cơ bản hợp nhất nó. Tuy nhiên, nếu bạn muốn giữ các công việc theo yêu cầu kéo, bạn có thể lấy chi nhánh tổng thể của bạn bè, làm một

git reset --hard 

trước khi bạn đẩy lên nó, và sau đó

git checkout -b tmp 
git cherry-pick otheruserbranch <list-of-commits-you-made> 
git checkout master 
git merge tmp 
git push <your-fork> master 

đó sẽ nhận được PR của bạn trở lại trông như bạn muốn nó (bạn có thể phải thực hiện một số điều chỉnh ở đó, tôi không phải là siêu rõ ràng về cấu trúc chi nhánh của bạn, nhưng đó là ý chính)

LƯU Ý: nhìn here cho các tài liệu trên git reset và chắc chắn rằng bạn hiểu hậu quả của việc đặt lại khó trước khi sử dụng.

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