Inilah yang sering saya gunakan:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
Perhatikan bahwa itu adalah praktik yang baik untuk tidak membuat perubahan untuk menguasai lokal / mengembangkan cabang, melainkan checkout ke cabang lain untuk perubahan, dengan nama cabang prepended dengan jenis perubahan, misalnya feat/
, chore/
, fix/
, dll Jadi Anda hanya perlu tarik perubahan, jangan mendorong perubahan apa pun dari master. Hal yang sama untuk cabang lain yang berkontribusi bagi orang lain. Jadi hal di atas hanya boleh digunakan jika Anda telah melakukan perubahan pada cabang yang telah dilakukan orang lain, dan perlu diatur ulang. Kalau tidak di masa depan hindari mendorong ke cabang yang mendorong orang lain, sebaliknya checkout dan mendorong ke cabang tersebut melalui cabang keluar.
Jika Anda ingin mengatur ulang cabang lokal Anda ke komit terbaru di cabang hulu, sejauh ini yang berfungsi untuk saya adalah:
Periksa remote Anda, pastikan hulu dan asal Anda sesuai dengan yang Anda harapkan, jika tidak seperti yang diharapkan git remote add upstream <insert URL>
, gunakan , mis. Repo GitHub asli yang Anda gunakan , dan / atau 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
Di GitHub, Anda juga dapat checkout cabang dengan nama yang sama dengan yang lokal, untuk menyimpan pekerjaan di sana, meskipun ini tidak perlu jika asal berkembang memiliki perubahan yang sama dengan cabang disimpan-kerja lokal. Saya menggunakan cabang berkembang sebagai contoh, tetapi bisa berupa nama cabang yang ada.
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
Kemudian jika Anda perlu menggabungkan perubahan ini dengan cabang lain sementara di mana ada konflik, menjaga perubahan dalam pengembangan, gunakan:
git merge -s recursive -X theirs develop
Saat digunakan
git merge -s recursive -X ours develop
untuk mempertahankan perubahan yang bertentangan branch_name. Kalau tidak gunakan mergetool dengangit mergetool
.
Dengan semua perubahan bersama:
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;
Perhatikan bahwa alih-alih hulu / pengembangan Anda dapat menggunakan hash komit, nama cabang lain, dll. Gunakan alat CLI seperti Oh My Zsh untuk memeriksa bahwa cabang Anda berwarna hijau yang menunjukkan bahwa tidak ada yang perlu dikomit dan direktori kerja bersih ( yang dikonfirmasi atau juga dapat diverifikasi oleh git status
). Perhatikan bahwa ini sebenarnya dapat menambahkan komit dibandingkan dengan pengembangan hulu jika ada sesuatu yang secara otomatis ditambahkan oleh komit, misalnya diagram UML, header lisensi, dll., Jadi dalam hal ini, Anda kemudian dapat menarik perubahan origin develop
ke upstream develop
, jika diperlukan.
git status
perintah kedua Andagit reset --hard HEAD
gagal. Anda tidak menempelkan hasilnya. → Pertanyaan tidak lengkap.