Đây là những gì tôi sử dụng thường xuyên:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
Lưu ý rằng nó là thực hành tốt không để thực hiện thay đổi để làm chủ địa phương của bạn / phát triển chi nhánh, nhưng thay vào đó thanh toán cho một chi nhánh đối với bất kỳ sự thay đổi, với tên chi nhánh prepended bởi loại thay đổi, ví dụ như feat/
, chore/
, fix/
, vv Vì vậy bạn chỉ cần kéo thay đổi, không đẩy bất kỳ thay đổi từ chủ. Điều tương tự cho các ngành khác mà người khác đóng góp. Vì vậy, những điều trên chỉ nên được sử dụng nếu bạn đã tình cờ thực hiện các thay đổi đối với một nhánh mà người khác đã cam kết và cần phải đặt lại. Mặt khác, trong tương lai, tránh đẩy đến một chi nhánh mà người khác đẩy tới, thay vào đó hãy kiểm tra và đẩy đến chi nhánh đã nói thông qua chi nhánh đã thanh toán.
Nếu bạn muốn đặt lại chi nhánh địa phương của mình thành cam kết mới nhất trong chi nhánh ngược dòng, điều làm việc cho tôi cho đến nay là:
Kiểm tra điều khiển từ xa của bạn, đảm bảo nguồn gốc và nguồn gốc của bạn là những gì bạn mong đợi, nếu không như mong đợi thì hãy sử dụng git remote add upstream <insert URL>
, ví dụ như repo GitHub ban đầu mà bạn đã rẽ nhánh và / hoặc git remote add origin <insert URL of the forked GitHub repo>
.
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
Trên GitHub, bạn cũng có thể kiểm tra chi nhánh có cùng tên với địa phương, để lưu công việc ở đó, mặc dù điều này không cần thiết nếu phát triển nguồn gốc có cùng thay đổi với chi nhánh công việc được lưu cục bộ. Tôi đang sử dụng nhánh phát triển làm ví dụ, nhưng nó có thể là bất kỳ tên nhánh hiện có nào.
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
Sau đó, nếu bạn cần hợp nhất các thay đổi này với một nhánh khác trong khi có bất kỳ xung đột nào, bảo toàn các thay đổi trong quá trình phát triển, hãy sử dụng:
git merge -s recursive -X theirs develop
Trong khi sử dụng
git merge -s recursive -X ours develop
để duy trì các thay đổi xung đột của Branch_name. Nếu không, sử dụng một mergetool với git mergetool
.
Với tất cả những thay đổi cùng nhau:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
Lưu ý rằng thay vì ngược dòng / phát triển, bạn có thể sử dụng hàm băm xác nhận, tên nhánh khác, v.v. Sử dụng công cụ CLI như Oh My Zsh để kiểm tra xem nhánh của bạn có màu xanh lá cây cho biết không có gì để cam kết và thư mục làm việc đã sạch ( được xác nhận hoặc cũng có thể kiểm chứng bằng git status
). Lưu ý rằng điều này thực sự có thể thêm cam kết so với thượng nguồn phát triển nếu có bất cứ điều gì tự động thêm vào bởi một cam kết, ví dụ như UML sơ đồ, tiêu đề giấy phép, vv, do đó trong trường hợp đó, bạn có thể kéo những thay đổi trên origin develop
để upstream develop
, nếu cần thiết.
git status
lệnh thứ hai của bạngit reset --hard HEAD
không thành công. Bạn đã không dán đầu ra của nó, mặc dù. → Câu hỏi chưa đầy đủ.