Saya memiliki cabang bernama dmgr2 (pengembangan) dan saya ingin menarik dari cabang utama (situs langsung) dan memasukkan semua perubahan ke cabang pengembangan saya. apakah ada cara yang lebih baik untuk melakukan ini? inilah yang telah saya rencanakan untuk dilakukan, setelah melakukan perubahan:
git checkout dmgr2
git pull origin master
ini harus menarik perubahan langsung ke cabang pengembangan saya, atau apakah saya salah ini?
dev
cabang dengan agit checkout dev
. Lalugit pull --rebase origin master
. Jika Anda beruntung, tidak akan ada konflik dan dev akan memiliki perubahan terbaru dari master.Jawaban:
Langkah-langkah yang Anda daftarkan akan berhasil, tetapi ada cara yang lebih panjang yang memberi Anda lebih banyak opsi:
The
fetch
perintah dapat dilakukan pada setiap titik sebelummerge
, yaitu, Anda dapat menukar urutan pengambilan dan kasir, karenafetch
hanya pergi ke bernama jarak jauh (origin
) dan mengatakan untuk itu: "beri aku segala sesuatu yang harus Anda bahwa saya tidak ", yaitu, semua komit di semua cabang. Mereka disalin ke repositori Anda, tetapi diberi namaorigin/branch
untuk cabang apa pun yang bernamabranch
pada remote.Pada titik ini Anda dapat menggunakan penampil apa pun (
git log
,,gitk
dll) untuk melihat "apa yang mereka miliki" yang tidak Anda miliki, dan sebaliknya. Kadang-kadang ini hanya berguna untuk Perasaan Fuzzy Hangat ("ah, ya, itulah sebenarnya yang saya inginkan") dan kadang-kadang berguna untuk mengubah strategi sepenuhnya ("whoa, saya belum menginginkan hal ITU").Akhirnya,
merge
perintah mengambil komit yang diberikan, yang dapat Anda sebutkanorigin/master
, dan melakukan apa pun untuk membawa komit dan leluhurnya, ke cabang apa pun yang Anda gunakan saat menjalankanmerge
. Anda dapat menyisipkan--no-ff
atau--ff-only
mencegah maju cepat, atau menggabungkan hanya jika hasilnya maju cepat, jika Anda mau.Saat Anda menggunakan urutan:
yang
pull
menginstruksikan perintah git untuk menjalankangit fetch
, dan kemudian setara moralgit merge origin/master
. Jadi ini hampir sama dengan melakukan dua langkah dengan tangan, tetapi ada beberapa perbedaan halus yang mungkin tidak terlalu mengkhawatirkan Anda. (Khususnyafetch
langkah yang dijalankan hanyapull
membawa , dan itu tidak memperbarui referensi di repo Anda: 1origin/master
setiap komit baru angin disebut-hanya dengan khususFETCH_HEAD
. Referensi)Jika Anda menggunakan yang lebih eksplisit
git fetch origin
(kemudian secara opsional melihat-lihat) dan kemudiangit merge origin/master
berurutan, Anda juga dapat membuat lokal Anda tetapmaster
up-to-date dengan remote, dengan hanya satufetch
run melintasi jaringan:contohnya.
1 Bagian kedua ini telah diubah — saya katakan "diperbaiki" —di git 1.8.4, yang sekarang memperbarui referensi "cabang jarak jauh" secara oportunis. (Itu, seperti catatan rilis mengatakan, keputusan desain yang disengaja untuk melewati pembaruan, tetapi ternyata lebih banyak orang lebih suka git memperbaruinya. Jika Anda ingin SHA-1 cabang jarak jauh yang lama, defaultnya adalah disimpan di , dan dengan demikian dapat dipulihkan dari reflog. Ini juga memungkinkan fitur git 1.9 / 2.0 baru untuk menemukan rebase hulu.)
sumber
git checkout
biasanya non-destruktif dan biasanya tidak ada alasan untuk membatalkangit fetch
, jadi sepertinya Anda menanyakan cara untuk mundur komit gabungan. Jawabannya sama dengan komit lainnya: baikgit reset
ataugit revert
. Untuk perubahan yang tidak dipublikasikangit reset
biasanya merupakan metode terbaik; untuk perubahan yang sudah dilakukan orang lain,git revert
mungkin lebih baik, tetapi lihat saran Linus Torvald tentang mengembalikan gabungan: kernel.org/pub/software/scm/git/docs/howto/…gitk
,git log --graph
dengan atau tanpa--oneline
, dan seterusnya) dan Anda bisagit show
ataugit show -m
gabungan komit, atau gunakangit diff
. Dalam semua kasus ini, Anda menentukan program saat Anda memasukkan perintah pada baris perintah.Situasi : Bekerja di cabang lokal saya, tetapi saya suka terus mengikuti perkembangan di cabang pengembangan yang bernama
dev
.Solusi : Biasanya, saya lebih suka melakukan:
sumber
Ini Berhasil untuk saya. Untuk mendapatkan kode terbaru dari master ke cabang saya
git rebase origin/master
sumber
git fetch origin
dulu.Skenario :
Saya memiliki pembaruan master dan pembaruan cabang saya, saya ingin cabang saya melacak master dengan rebasing, untuk menjaga semua sejarah dilacak dengan benar, sebut saja cabang saya Mybranch
Solusi :
(koreksi ke tahap terakhir, milik Tzachi Cohen, menggunakan "-f" pasukan git untuk "memperbarui sejarah" di server)
sekarang branch harus disejajarkan dengan master dan rebased, juga dengan remote yang diperbarui, jadi pada git log tidak ada "di belakang" atau "depan", hanya perlu menghapus semua konflik lokal * .orig file untuk menjaga folder "bersih"
sumber