Jawaban Singkat
Selama Anda melakukan penggabungan maju-cepat , maka Anda bisa menggunakannya
git fetch <remote> <sourceBranch>:<destinationBranch>
Contoh:
# Merge local branch foo into local branch master,
# without having to checkout master first.
# Here `.` means to use the local repository as the "remote":
git fetch . foo:master
# Merge remote branch origin/foo into local branch foo,
# without having to checkout foo first:
git fetch origin foo:foo
Sementara jawaban Amber juga akan berfungsi dalam kasus fast-forward, menggunakan git fetch
dengan cara ini sebagai gantinya sedikit lebih aman daripada hanya memindahkan-paksa referensi cabang, karena git fetch
secara otomatis akan mencegah non-fast-forward tanpa disengaja asalkan Anda tidak menggunakannya +
dalam refspec.
Jawaban Panjang
Anda tidak dapat menggabungkan cabang B menjadi cabang A tanpa memeriksa A terlebih dahulu jika itu akan menghasilkan penggabungan non-maju cepat. Ini karena copy pekerjaan diperlukan untuk menyelesaikan potensi konflik.
Namun, dalam kasus penggabungan maju-cepat, ini dimungkinkan , karena penggabungan tersebut tidak pernah dapat mengakibatkan konflik, menurut definisi. Untuk melakukan ini tanpa memeriksa cabang terlebih dahulu, Anda dapat menggunakan git fetch
dengan refspec.
Berikut adalah contoh pemutakhiran master
(melarang perubahan tidak-maju-cepat) jika Anda memiliki cabang lain yang feature
diperiksa:
git fetch upstream master:master
Casing penggunaan ini sangat umum, sehingga Anda mungkin ingin membuat alias untuknya di file konfigurasi git Anda, seperti ini:
[alias]
sync = !sh -c 'git checkout --quiet HEAD; git fetch upstream master:master; git checkout --quiet -'
Apa yang dilakukan alias ini adalah sebagai berikut:
git checkout HEAD
: ini membuat copy pekerjaan Anda menjadi kondisi kepala terpisah. Ini berguna jika Anda ingin memperbarui master
sementara Anda telah check-out. Saya pikir itu perlu dilakukan karena kalau tidak referensi cabang untuk master
tidak akan bergerak, tapi saya tidak ingat apakah itu benar-benar tepat di luar kepala saya.
git fetch upstream master:master
: ini memajukan lokal Anda master
ke tempat yang sama dengan upstream/master
.
git checkout -
periksa cabang yang sebelumnya Anda check-out (itulah yang -
dilakukan dalam hal ini).
Sintaksis git fetch
untuk (tidak) penggabungan maju cepat
Jika Anda ingin fetch
perintah gagal jika pembaruan tidak maju, maka Anda cukup menggunakan refspec dari formulir
git fetch <remote> <remoteBranch>:<localBranch>
Jika Anda ingin memperbolehkan pembaruan yang tidak maju, maka Anda menambahkan a di +
bagian depan refspec:
git fetch <remote> +<remoteBranch>:<localBranch>
Perhatikan bahwa Anda dapat meneruskan repo lokal Anda sebagai parameter "jarak jauh" menggunakan .
:
git fetch . <sourceBranch>:<destinationBranch>
Dokumentasi
Dari git fetch
dokumentasi yang menjelaskan sintaks ini (penekanan pada saya):
<refspec>
Format <refspec>
parameter adalah plus opsional +
, diikuti oleh ref sumber <src>
, diikuti oleh titik dua :
, diikuti oleh ref tujuan <dst>
.
Referensi jarak jauh yang cocok <src>
diambil, dan jika <dst>
bukan string kosong, referensi lokal yang cocok akan diteruskan dengan cepat menggunakan<src>
. Jika plus opsional+
digunakan, ref lokal diperbarui walaupun itu tidak menghasilkan pembaruan maju cepat.
Lihat juga
Dapatkan checkout dan bergabung tanpa menyentuh pohon yang berfungsi
Penggabungan tanpa mengubah direktori kerja