Saya memiliki repositori git dengan 2 cabang: master dan test.
Ada perbedaan antara cabang master dan test.
Kedua cabang memiliki semua perubahan yang dilakukan.
Jika aku melakukan:
git checkout master
tes git diff
Layar penuh perubahan muncul yang menunjukkan perbedaan. Saya ingin menggabungkan perubahan di cabang tes dan begitu juga:
git merge test
Tetapi dapatkan pesan "Sudah mutakhir"
Namun, memeriksa file di bawah masing-masing cabang berbeda jelas menunjukkan perbedaan.
Apa masalahnya di sini dan bagaimana cara mengatasinya?
Jawaban:
Pesan "Sudah diperbarui" berarti bahwa semua perubahan dari cabang yang Anda coba gabungkan telah digabungkan ke cabang yang saat ini Anda gunakan. Lebih khusus itu berarti cabang yang Anda coba gabungkan adalah induk dari cabang Anda saat ini . Selamat, itu penggabungan termudah yang pernah Anda lakukan. :)
Gunakan
gitk
untuk melihat repositori Anda. Label untuk cabang "test" harus berada di bawah label cabang "master" Anda.Cabang Anda mutakhir sehubungan dengan induknya. Menurut penggabungan tidak ada perubahan baru di induk sejak penggabungan terakhir. Itu tidak berarti cabang-cabangnya sama, karena Anda dapat memiliki banyak perubahan di cabang kerja Anda dan sepertinya Anda lakukan.
Sunting 10/12/2019:
Per Charles Drake dalam komentar untuk jawaban ini, salah satu solusi untuk memulihkan masalah adalah:
Ini membawanya kembali ke level 'test'.
Kemudian lakukan:
untuk memaksa perubahan kembali ke repo pusat.
sumber
Ini sering terjadi pada saya ketika saya tahu ada perubahan pada master jarak jauh, jadi saya mencoba untuk menggabungkan mereka menggunakan
git merge master
. Namun, ini tidak bergabung dengan master jarak jauh, tetapi dengan master lokal Anda.Jadi sebelum melakukan penggabungan, checkout master, dan kemudian di
git pull
sana. Maka Anda akan dapat menggabungkan perubahan baru ke cabang Anda.sumber
git fetch
akan memperbarui cabang utama bahkan jika saya saat ini pada yang berbeda. Ternyata tidak. Terima kasih! Saya cukup yakin ada opsi untukfetch
itu memungkinkan Anda menentukan cabang mana yang akan Anda dapatkan.git fetch --all
, tetapi ini hanya mengambil cabang, itu tidak menariknya.git fetch --all && git merge origin/master
. Tidak perlu memperbarui lokal Andamaster
untuk menggabungkan perubahan jarak jauh.git merge master
1 dan 1 dengangit merge origin/master
. Saya juga sudah memeriksamaster
dangit pull
sebelum memperbarui 2 cabang. meskipun mereka berbagi konten yang sama, membuat PR antara 2 cabang menunjukkan beberapa file berbeda. Saya diperbaiki olehgit pull
cabang target menjadi cabang fitur, yang menunjukkan:Already up to date! Merge made by the 'recursive' strategy.
ini menghasilkan gabungan komit tanpa perubahan, tetapi menghapus file diff yang tidak terduga dari PR. tahu mengapa ada perbedaan antara menggabungkan cabang lokal dan remote "setara"?Katakanlah Anda memiliki cabang
master
dengan riwayat komit berikut:Sekarang, Anda membuat tes cabang, mengerjakannya, dan melakukan 4 komitmen:
master
Head menunjuk ke D, dantest
head menunjuk ke H.Pesan "Sudah up-to-date" muncul ketika KEPALA cabang yang Anda gabungkan adalah induk dari rantai komit cabang yang ingin Anda gabungkan. Itulah masalahnya, di sini:
D
adalah orangtua dariE
.Tidak ada yang menggabungkan dari
test
kemaster
, karena tidak ada yang berubah padamaster
sejak saat itu. Apa yang ingin Anda lakukan di sini adalah memberi tahu Git agar memilikimaster
kepala yang mengarah ke H, sehingga cabang master memiliki sejarah komit sebagai berikut:Ini adalah pekerjaan untuk perintah Git
reset
. Anda juga ingin direktori kerja mencerminkan perubahan ini, sehingga Anda akan melakukan hard reset:sumber
git reset --hard
adalah hal yang cukup drastis untuk dilakukan, bisakah kehilangan komitmen? Apakah ada cara yang lebih aman untuk melakukan perubahan ini, atau ada bahayagit reset --hard
berlebihan?--hard
opsi adalah kenyataan bahwa itu benar-benar mengubah direktori kerja Anda, dan sebagai konsekuensinya, Anda kehilangan perubahan yang tidak dikomit. Secara pribadi, saya melakukangit status
sebelum dan sesudah setiap perintah git yang dijalankan secara manual untuk memastikan repo saya bersih atau dalam kondisi yang diharapkan.--hard
opsi yang dibutuhkan ? Saya sudah dalam situasi ini beberapa kali sekarang dan selalu reset tanpa--hard
. Itu bekerja dengan baik tanpa risiko kehilangan perubahan yang tidak dikomit.Apa yang berhasil untuk saya, katakanlah Anda memiliki branch1 dan Anda ingin menggabungkannya menjadi branch2.
Anda membuka perintah git, buka folder root dari branch2 dan ketik:
Jika Anda memiliki comflicts, Anda tidak perlu melakukan git push, tetapi pertama-tama pecahkan konflits dan kemudian dorong.
sumber
Itu berarti komit dalam ujian sudah digabung dalam master, tetapi karena komit lain dilakukan pada master,
git diff test
masih akan memberikan beberapa perbedaan.sumber
Ini terjadi karena salinan lokal cabang yang ingin Anda gabungkan ketinggalan zaman. Saya memiliki cabang saya, dipanggil
MyBranch
dan saya ingin menggabungkannyaProjectMaster
.Tetapi saya tahu bahwa ada perubahan yang perlu digabungkan!
Begini, ketika saya mengetik
git merge ProjectMaster
, git melihat salinan lokal saya dari cabang ini, yang mungkin tidak mutakhir . Untuk melihat apakah ini yang terjadi, saya pertama-tama memberi tahu Git untuk memeriksa dan melihat apakah cabang-cabang saya ketinggalan zaman dan mengambil perubahan apa pun jika menggunakan, ehfetch
,. Lalu saya melompat ke cabang saya ingin bergabung untuk melihat apa yang terjadi di sana ...Ah-ha! Salinan lokal saya basi oleh 85 commit, yang menjelaskan semuanya! Sekarang, saya
Pull
turunkan perubahan yang saya lewatkan, lalu naik keMyBranch
dan coba penggabungan lagi.Dan sekarang saya punya masalah lain untuk diperbaiki ...
sumber
Ini terjadi pada saya karena anehnya GIT berpikir bahwa cabang lokal berbeda dari cabang terpencil. Ini terlihat dalam grafik cabang: ini menampilkan dua cabang yang berbeda: remote / origin / branch_name dan branch_name.
Solusinya adalah menghapus repo lokal dan mengkloningnya dari jarak jauh. Dengan cara ini GIT akan mengerti bahwa remote / origin / branch_name> dan branch_name memang sama, dan saya bisa mengeluarkan
git merge branch_name
.sumber
git merge origin/master
alih-alihgit merge master
bekerja untuk saya. Jadi untuk menggabungkan master ke cabang fitur, Anda dapat menggunakan:sumber
Pastikan untuk checkout cabang yang ingin Anda gabungkan dulu dan kemudian tarik (jadi versi lokal Anda cocok dengan versi jarak jauh).
Kemudian checkout kembali ke cabang tempat Anda ingin melakukan penggabungan dan git merge Anda akan berfungsi.
sumber
git pull
di "branch"senang kepada saya dan dikirim ke halaman ini, tidak yakin apakah saya memiliki skenario yang sama, tetapi milik saya adalah saya yang mencoba "menggabungkan kembali" cabang "uji" itu.
Jadi saya sebelumnya menggabungkannya tetapi saya sengaja mengecualikan beberapa perubahan spesifik selama penggabungan itu, sehingga jelas memiliki beberapa perbedaan antar cabang. Saya kemudian mencoba untuk menggabungkan kembali karena saya menyadari / lupa bahwa saya seharusnya dan ingin menambahkan perubahan / file tertentu yang sebelumnya saya kecualikan dan saya berharap jika saya melakukan penggabungan lagi akan menunjukkan semua perubahan yang saya kecualikan sebelumnya , tapi saya salah dan saya mendapat pesan "Sudah mutakhir".
Setelah membaca @ Bombe komentar / jawaban, dia benar, dan git saya pikir berperilaku seperti itu, jadi apa yang saya lakukan adalah membuat cadangan keras dari file pada cabang uji, kemudian checkout cabang master dan secara manual menempelkan file di dalamnya dan melakukan seolah-olah itu adalah perubahan baru.
Saya tidak yakin apakah ini cara yang benar atau dapat membantu orang lain memiliki masalah yang sama, tetapi memang memberikan solusi untuk kasus khusus saya.
sumber
git checkout srcBranch -- path/to/file
. Dapat menggunakan file gumpalan juga.checkout srcBranch -- *
dan kemudian melihat diff sayaJika menggabungkan cabang A ke cabang B melaporkan "Sudah up to date", sebaliknya tidak selalu benar. Memang benar hanya jika cabang B adalah keturunan dari cabang A, jika tidak cabang B hanya dapat memiliki perubahan yang tidak ada di A.
Contoh:
Pada titik ini, penggabungan A ke B melaporkan "Sudah up to date" tetapi cabang-cabangnya berbeda karena cabang B memiliki pembaruan dari master sedangkan cabang A tidak.
sumber
Menghadapi skenario ini menggunakan Git Bash.
Repositori kami memiliki banyak cabang dan setiap cabang memiliki siklus komit yang berbeda dan penggabungan terjadi sesekali. Old_Branch digunakan sebagai induk untuk New_Branch
Old_Branch telah diperbarui dengan beberapa perubahan yang perlu digabungkan dengan New_Branch
Sedang menggunakan perintah pull di bawah ini tanpa cabang untuk mendapatkan semua sumber dari semua cabang.
Anehnya ini tidak menarik semua komitmen dari semua cabang. Sudah memikirkannya sehingga ditunjukkan menunjukkan hampir semua cabang dan tag.
Jadi untuk memperbaiki ini telah memeriksa Old_Branch menarik menggunakan terbaru
Sekarang periksa New_Branch
Menariknya untuk memastikan
Dan viola mendapat konflik untuk diperbaiki dari Old_Branch ke New_Branch :) yang diharapkan
sumber
Hal yang sama terjadi pada saya. Tetapi skenarionya sedikit berbeda, saya memiliki cabang utama, dan saya mengukir release_1 (katakanlah) darinya. Buat beberapa perubahan di cabang release_1 dan gabungkan menjadi asalnya. kemudian saya melakukan ssh dan pada server jarak jauh saya kembali checkout release_1 menggunakan perintah git checkout -b release_1 - yang sebenarnya mengukir branch_ release baru! dari master alih-alih memeriksa rilis branch_1 yang sudah ada dari asal. Memecahkan masalah dengan menghapus saklar "-b"
sumber
Saya memiliki masalah yang sama. Saya memiliki perubahan di remote dan itu masih menunjukkan "Sudah up to date". Rekloning repositori memperbaiki masalah untuk saya.
sumber
Konyol tapi itu mungkin terjadi. Misalkan nama cabang Anda diawali dengan referensi masalah (misalnya
#91-fix-html-markup
), jika Anda melakukan penggabungan ini:itu tidak akan berfungsi sebagaimana dimaksud karena semuanya setelah
#
diabaikan, karena#
memulai komentar sebaris.Dalam hal ini Anda dapat mengubah nama Menghilangkan cabang
#
atau menggunakan tanda kutip tunggal untuk mengelilingi nama cabang:git merge '#91-fix-html-markup'
.sumber