Saya secara tidak sengaja mengerjakan cabang yang seharusnya tidak saya tempati untuk sementara waktu, jadi saya cabut cabang itu sehingga memberi nama yang sesuai. Sekarang saya ingin menimpa cabang saya seharusnya tidak ke versi dari asal (github). Apakah ada cara mudah untuk melakukan ini? Saya mencoba menghapus cabang dan mengatur ulang cabang pelacakan, tetapi itu hanya memberi saya versi yang saya kerjakan lagi.
439
git switch -C mybranch origin/mybranch
. Lihat jawaban saya yang diedit di bawah iniJawaban:
Jika Anda belum mendorong ke asal, Anda dapat mengatur ulang cabang Anda ke cabang hulu dengan:
(Pastikan Anda merujuk komit terbaru Anda di cabang terpisah, seperti yang Anda sebutkan dalam pertanyaan Anda)
Perhatikan bahwa tepat setelah reset,
mybranch@{1}
merujuk ke komit yang lama, sebelum reset.Tetapi jika Anda sudah mendorong, lihat " Buat cabang git, dan kembalikan yang asli ke status hulu " untuk opsi lainnya.
Dengan Git 2.23 (Agustus 2019) , yang akan menjadi satu perintah:
git switch
.Yaitu:
git switch -C mybranch origin/mybranch
Contoh
Itu mengembalikan indeks dan pohon kerja, seperti sebuah
git reset --hard
wasiat.Seperti dikomentari oleh Brad Herman , a
reset --hard
akan menghapus file baru atau mereset file yang dimodifikasi ke HEAD .Sebenarnya, untuk memastikan Anda memulai dari "clean slate",
git clean -f -d
setelah reset akan memastikan pohon yang bekerja persis sama dengan cabang yang baru Anda setel ulang.Posting blog ini menyarankan alias tersebut (
master
hanya untuk cabang, tetapi Anda dapat menyesuaikan / memperluasnya):sumber
git reset --hard origin/mybranch
perintah beberapa kali ketika saya tidak peduli dengan perubahan lokal dan hanya ingin salinan bersih yang cocok dengan aslinya. Namun, hari ini, ini tidak berhasil - saya masih memiliki beberapa file baru, tidak dipentaskan, dan git terus menjanjikan saya bahwa itu di HEAD. Catatan tentanggit clean -f -d
memperbaikinya dengan menghapus semua file baru yang tidak saya inginkan.git reset --hard HEAD
untuk kembali ke komit sebelumnya, mengabaikan perubahan apa punDengan asumsi inilah yang terjadi:
Kemudian Anda menyadari bahwa Anda membuat perubahan pada cabang yang salah.
Tetapi
master
masih menunjuk komit Anda. Anda ingin menunjuk ke tempat yang ditunjuk sebelumnya.Larutan
Cara termudah adalah:
Cara lain adalah:
Perhatikan bahwa menggunakan
reset --hard
akan menyebabkan perubahan yang tidak dikomit Anda menjadi hilang (tests.py
dalam contoh saya).sumber
Saya memiliki repo pribadi di server dan secara teratur rebase / paksa-push, yang membuatnya perlu untuk mereset cabang lokal di komputer saya yang lain sering. Karena itu saya membuat alias "catchup" berikut, yang memungkinkan melakukan ini untuk cabang saat ini. Tidak seperti jawaban lainnya, tidak ada nama cabang yang di-hardcode dalam alias ini.
Pegang erat-erat.
Diformat dengan benar (tidak akan bekerja dengan baris baru di .gitconfig) seperti ini:
\\033[0;33m
dan\\033[0m
adalah untuk menekankan cabang saat ini dan hulu dengan warna.$(git symbolic-ref -q --short HEAD)
adalah nama cabang saat ini$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))
adalah hulu dari cabang saat ini.Karena reset adalah panggilan yang berpotensi berbahaya (terutama dengan opsi --hard, Anda akan kehilangan perubahan yang tidak dikomit), yang pertama kali memberitahu Anda apa yang akan dilakukan. Misalnya jika Anda menggunakan wadah dev cabang dengan remote bernama qcpp / dev-container dan Anda masuk
git catchup
, Anda akan diminta:Jika Anda mengetikkan y atau menekan kembali, itu akan melakukan reset. Jika Anda memasukkan hal lain, pengaturan ulang tidak akan dilakukan.
Jika Anda ingin menjadi super aman dan secara terprogram mencegah kehilangan perubahan yang tidak dipentaskan / tidak dikomit, Anda dapat mucikari alias di atas lebih lanjut dengan cek sesuai untuk diff-index .
Kata peringatan wajib: Jika Anda mengerjakan repositori publik yang digunakan orang lain untuk mengerjakannya, dan Anda memerlukan alias ini, Anda salah melakukannya ™ .
sumber
Saya mencoba ini dan itu tidak me-reset cabang saya saat ini ke github jarak jauh saya terbaru. Saya mencari di Google dan menemukan https://itsyndicate.org/blog/how-to-use-git-force-pull-properly/
yang disarankan
Saya ingin mengatur ulang cabang v8 saya jadi saya lakukan
dan itu berhasil
sumber