git buang semua perubahan dan tarik dari hulu


145

Bagaimana cara mengambil repo upstream dan membuatnya menggantikan master? Saya hanya memiliki satu cabang di repo saya, yang merupakan master, dan saya benar-benar mengacaukannya, jadi saya pada dasarnya perlu memulai dari awal. Saya pikir init akan melakukan pekerjaan, tetapi apakah ada cara yang lebih mudah?

Jawaban:


251

Ada (setidaknya) dua hal yang dapat Anda lakukan di sini - Anda dapat menggabungkan repo jarak jauh, atau Anda bisa reset --hardke leluhur bersama dan kemudian melakukan tarikan, yang akan mempercepat maju ke komit terbaru pada master jarak jauh.

Untuk menjadi nyata, berikut ini adalah perpanjangan sederhana dari jawaban asli Nevik Rehnel:

git reset --hard origin/master
git pull origin master

CATATAN : menggunakan git reset --hardakan membuang semua perubahan yang tidak dikomit, dan mungkin mudah untuk membingungkan diri Anda dengan perintah ini jika Anda baru git, jadi pastikan Anda memiliki perasaan tentang apa yang akan dilakukan sebelum melanjutkan.


1
Lebih banyak bantuan untuk pemula di luar sana: git gcmembersihkan dan menjalankan melalui beberapa rumah tangga. Pada catatan lain, saya belum pernah lari git gc. Ini bagus untuk dijalankan, tetapi tidak diperlukan.
Joshua Dance

@ JoshuaDance - poin bagus. Saya tidak yakin mengapa saya awalnya memasukkannya.
Eric Walker

23

saat di master cabang: git reset --hard origin/master

kemudian lakukan pembersihan dengan git gc(lebih lanjut tentang ini di halaman manual)

Pembaruan: Anda mungkin juga perlu melakukan git fetch origin(atau git fetch origin masterjika Anda hanya menginginkan cabang itu); seharusnya tidak masalah jika Anda melakukan ini sebelum atau setelah reset. (Terima kasih @ eric-walker)


1
Anda mungkin perlu melakukan tarikan setelah reset --hard.
Eric Walker

Menarik dari master tidak perlu begitu git fetch asal dijalankan sebelum reset.
sciritai

@sciritai: komentar saya ditambahkan sebelum menyebutkan mengambil dari asal.
Eric Walker

19

Anda dapat melakukannya dalam satu perintah:

git fetch --all && git reset --hard origin/master

Atau dalam sepasang perintah:

git fetch --all
git reset --hard origin/master

Perhatikan bahwa Anda akan kehilangan SEMUA perubahan lokal Anda


5
git reset <hash>  # you need to know the last good hash, so you can remove all your local commits

git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f

voila, sekarang garpu Anda kembali sama dengan hulu.


0

Saya akhirnya menyadari sekarang bahwa alih-alih git fetch --all && git reset --hard origin/master, itu seharusnya git fetch --all && git reset --hard origin/<branch_name>, alih-alih (jika seseorang bekerja pada cabang yang berbeda)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.