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.