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
Xiè Jìléi
sumber
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.

VONC
sumber
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.

KindDragon
sumber
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

Alexander Bird
sumber
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.

Fuad Saud
sumber
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