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?

NinjaCowgirl
sumber

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.

Eric Walker
sumber
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)

Nevik Rehnel
sumber
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

Luca C.
sumber
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.

hasilnya
sumber
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)

BitFreak
sumber