Bagaimana cara mengatur ulang 'master' ke 'origin / master'?


216

Bisakah saya melakukan yang berikut dengan cara yang lebih sederhana?

git checkout origin/master
git branch -D master
git branch master
git checkout master

Terkadang, ini dapat dilakukan tanpa menyentuh pohon kerja: stackoverflow.com/a/12343727/586086
— Andrew Mao

6
Harap perbarui jawaban yang Anda terima: Jawaban @ KindDragon lebih benar dan lebih pendek.
— Robert Siemer

Jawaban:


310

Sebagai KindDragon 's jawaban menyebutkan, Anda dapat menciptakan masterlangsung di origin/masterdengan:

git checkout -B master origin/master

The git checkouthalaman manual menyebutkan:

Jika -Bdiberikan, <new_branch>dibuat jika tidak ada; jika tidak, itu diatur ulang . Ini adalah setara transaksional dari

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

Awalnya disarankan:

Sesuatu seperti:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master

dengan langkah 2 menjadi opsional.


1
Anda dapat melakukannya dengan satu baris.
— Robert Siemer

94

Git mendukung perintah ini:

git checkout -B master origin/master

Periksa origin/mastercabang dan reset mastercabang di sana.


4
Satu-satunya jawaban yang benar.
— Robert Siemer

3
simpan empat penekanan tombol - Anda tidak perlu tanda kutip. Hanya: git checkout -B master asal / master
— zumalifeguard

katakanlah saya melakukan 2 hal, yang pertama adalah penggabungan dengan cabang dan yang kedua adalah reguler. Apa yang terjadi pada penggabungan jika saya kembali ke asal / master?
— utdev

1
Anda tidak harus git fetch origin mastersebelum memastikan origin/masterdiperbarui?
— pedrozath

Ya, tentu saja dengan semua solusi yang harus Anda lakukan git fetchterlebih dahulu
— KindDragon

29

Saya pikir bahkan jawaban VonC memiliki kompleksitas dibandingkan dengan opsi ini:

git update-ref refs/heads/master origin/master
git reset --hard master

git secara otomatis mencatat setiap nilai ref (melalui reflog). Jadi setelah Anda menjalankan perintah itu, maka master@{1}merujuk ke nilai master sebelumnya.

Jawaban VonC benar, tetapi membuang-buang waktu untuk keluar dari nilai lama master ke sistem file.

Jika Anda peduli tentang benda yatim di repo, maka Anda dapat berlari git gc


1
Terdengar alternatif yang menarik. +1
— VonC

Saya masih mendapatkanAlready on 'master'
— yourfriendzak

@ yourfriendzak, saya lupa tentang memperhitungkan bahwa Anda mungkin sudah memeriksa master sebelum memperbarui master. Saya telah memperbarui jawabannya menjadi salah satu yang harus bekerja bahkan dalam kasus itu juga.
— Alexander Bird

Ini berfungsi bahkan jika Anda tidak berada di master (seperti keadaan HEAD terpisah yang sebenarnya menunjuk ke asal tip / master). Kemudian, Anda dapat checkout master tanpa harus membalik file lama melalui repo. Bagus!
— Andrew Mao

20

Jika sudah aktif masterAnda dapat melakukan hal berikut:

git reset --hard origin/master

Ini akan mengarahkan mastercabang lokal ke remote origin/masterdan membuang modifikasi apa pun di dir yang berfungsi.


Dan akan menghapus file! Jika Anda telah membuat / mengedit file, dan telah menjalankan "git add" pada mereka, perintah ini akan menghapusnya. Diperingatkan.
— Cheeso

Apakah pendekatan ini lebih baik daripada git checkout -B master origin/master?
— Jim Aho
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.