Apa cara terbaik (dan teraman) untuk menggabungkan cabang Git menjadi penyihir?

Cabang baru dibuat dari master , kami menyebutnya test .

Ada beberapa pengembang yang mentransfer ke master , atau membuat cabang lain, dan kemudian bergabung menjadi master .

Misalkan bekerja pada test membutuhkan beberapa hari, dan Anda ingin terus memperbarui test menggunakan komit di dalam master .

Saya akan melakukan git pull origin master dari test .

Pertanyaan 1: Apakah ini benar? Pengembang lain dapat dengan mudah bekerja dengan file yang sama dengan yang saya kerjakan. Ngomong-ngomong


Pekerjaan saya pada test sedang berjalan, dan saya siap untuk menggabungkannya dengan master lagi. Berikut adalah dua cara yang dapat saya pikirkan:

A:

 git checkout test git pull origin master git push origin test git checkout master git pull origin test 

B:

 git checkout test git pull origin master git checkout master git merge test 

Saya tidak menggunakan --rebase karena, menurut saya, rebase akan menerima perubahan dari master dan meletakkan milik saya di atas ini, sehingga dapat menimpa perubahan yang dibuat oleh orang lain.

Pertanyaan 2: Manakah dari dua metode ini yang benar? Apa bedanya?

Tujuannya adalah untuk menjaga cabang test diperbarui dengan hal-hal yang terjadi pada master , dan kemudian saya dapat menggabungkannya kembali ke master , berharap untuk menjaga grafik selinier mungkin.

1682
09 апр. atur moe 09 apr. 2011-04-09 03:01 '11 pada 3:01 2011-04-09 03:01
@ 9 jawaban

Bagaimana saya melakukannya?

 git checkout master git pull origin master git merge test git push origin master 

Jika saya memiliki cabang lokal dari yang jauh, saya tidak nyaman dengan menggabungkan cabang lain dari yang jauh. Selain itu, saya tidak akan memaksa perubahan saya sampai saya puas dengan apa yang ingin saya tekan, dan juga saya tidak akan mendorong semuanya, ini hanya untuk saya dan repositori lokal saya. Dalam uraian Anda, sepertinya test hanya untuk Anda? Karena itu, tidak ada alasan untuk mempublikasikannya.

git selalu berusaha menghargai perubahan Anda dan lainnya, dan begitu juga --rebase . Saya rasa saya tidak bisa menjelaskannya dengan benar, jadi lihatlah buku Git-Rebasing atau git-sudah: pengantar untuk reboot untuk deskripsi singkat. Ini adalah fitur yang sangat keren.

2477
09 апр. jawabannya diberikan KingCrunch 09 April. 2011-04-09 03:45 '11 jam 3:45 pagi 2011-04-09 03:45

Ini adalah pertanyaan yang sangat praktis, tetapi semua jawaban di atas tidak praktis.

seperti

 git checkout master git pull origin master git merge test git push origin master 

Pendekatan ini memiliki dua pertanyaan :

  1. Ini tidak aman karena kita tidak tahu apakah ada konflik antara cabang uji dan cabang utama.

  2. Dia "memeras" semua tes yang dilakukan menjadi satu gabungan serikat pekerja di master; yaitu, di cabang utama, kami tidak bisa melihat semua log perubahan dari cabang tes.

Karena itu, ketika kami menduga bahwa beberapa konflik akan muncul, kami dapat melakukan operasi git berikut:

 git checkout test git pull git checkout master git pull git merge --no-ff --no-commit test 

Kuras merge uji sebelum commit , hindari penerusan cepat dengan --no-ff ,

Jika terjadi konflik, kita dapat menjalankan git status untuk memeriksa informasi konflik dan mencoba menyelesaikannya

 git status 

Ketika kita menyelesaikan konflik atau jika tidak ada konflik, kita commit dan push mereka.

 git commit -m 'merge test branch' git push 

Tetapi metode ini akan kehi>

Oleh karena itu, metode terbaik adalah menggunakan rebase alih-alih merge (misalkan, saat ini kami menyelesaikan konflik cabang).

Di bawah ini adalah contoh sederhana, untuk operasi lebih lama, lihat Http://git-scm.com/book/en/v2/Git-Branching-Rebasing

 git checkout master git pull git checkout test git pull git rebase -i master git checkout master git merge test 

Ya, ketika Anda berhasil mencapai puncak, semua ujian akhir akan ditransfer ke kepala cabang master. Keuntungan utama dari pemulihan adalah Anda mendapatkan riwayat proyek yang linier dan bersih.

Satu-satunya hal yang perlu Anda hindari: jangan pernah menggunakan rebase di cabang publik sebagai cabang utama.

Jangan pernah melakukan operasi berikut :

 git checkout master git rebase -i test 

Detail tentang https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing

aplikasi:

304
14 марта '15 в 15:13 2015-03-14 15:13 jawabannya diberikan oleh John Yin pada 14 Maret '15 pukul 15:13 2015-03-14 15:13

Baik rebid atau penggabungan tidak boleh menimpa perubahan kepada siapa pun (kecuali jika Anda memutuskan untuk melakukan ini saat menyelesaikan konflik).

Pendekatan yang biasa dilakukan saat berkembang

 git checkout master git pull git checkout test git log master.. # if you're curious git merge origin/test # to update your local test from the fetch in the pull earlier 

Ketika Anda siap untuk bersatu dalam master,

 git checkout master git log ..test # if you're curious git merge test git push 

Jika Anda khawatir tentang memecahkan sesuatu dalam penggabungan, git merge --abort ada untuk Anda.

Menggunakan dorongan dan kemudian menarik, sebagai sarana penggabungan, adalah bodoh. Saya juga tidak tahu mengapa Anda menekan tes asal.

80
10 апр. balas diberikan raylu 10 Apr 2011-04-10 03:17 '11 pada 3:17 2011-04-10 03:17

Pertama, saya akan membuat cabang denda setinggi mungkin. Jalankan tes Anda, pastikan keadaannya seperti yang Anda inginkan. Bersihkan komit git squash baru.

Selain jawaban KingCrunches , saya sarankan menggunakan

 git checkout master git pull origin master git merge --squash test git commit git push origin master 

Anda mungkin telah membuat banyak komitmen di cabang lain, yang seharusnya hanya satu komit di cabang utama. Untuk menjaga riwayat komit sebersih mungkin, Anda mungkin perlu memeras semua komitmen Anda dari cabang uji menjadi satu fiksasi di cabang utama (lihat Juga: Git: Labu atau tidak untuk squash? ). Kemudian Anda juga dapat menulis u>

Sunting: Anda mungkin tertarik

Jadi pada GitHub, saya akhirnya melakukan hal berikut untuk mybranch fungsi mybranch :

Dapatkan data terbaru dari sumbernya

 $ git checkout master $ git pull origin master 

Temukan hash gabungan:

 $ git merge-base mybranch master c193ea5e11f5699ae1f58b5b7029d1097395196f $ git checkout mybranch $ git rebase -i c193ea5e11f5699ae1f58b5b7029d1097395196f 

Sekarang pastikan bahwa hanya pick pertama, sisanya s :

 pick 00f1e76 Add first draft of the Pflichtenheft s d1c84b6 Update to two class problem s 7486cd8 Explain steps better 

Kemudian pilih pesan komit yang sangat baik dan klik GitHub. Kemudian buat permintaan untuk melakukan peregangan.

Setelah menggabungkan permintaan pengambilan, Anda dapat menghapusnya secara lokal:

 $ git branch -d mybranch 

dan di github

 $ git push origin :mybranch 
30
21 апр. balasan yang diberikan oleh Martin Thoma 21 Apr 2016-04-21 11:18 '16 pada 11:18 2016-04-21 11:18

Ini adalah alur kerja yang saya gunakan dalam pekerjaan saya dengan tim. Script seperti yang Anda gambarkan. Pertama, ketika saya selesai mengerjakan test , saya menginstal u>test .

git pull -r upstream master

Ini akan menyebabkan perubahan pada master, karena Anda bercabang cabang test dan menerapkannya, dan kemudian menerapkan perubahan yang Anda buat untuk memeriksa di atas keadaan wizard saat ini. Mungkin ada konflik jika orang lain membuat perubahan pada file yang sama yang Anda edit dalam tes. Jika ada, Anda harus memperbaikinya secara manual dan melakukan. Setelah Anda melakukan ini, akan berguna bagi Anda untuk beralih ke cabang utama dan menggabungkan test tanpa masalah.

4
17 марта '16 в 1:27 2016-03-17 01:27 jawabannya diberikan djheru 17 Maret 16 di 1:27 2016-03-17 01:27
 git checkout master git pull origin master # Merge branch test into master git merge test 

Setelah penggabungan, jika file diubah, maka ketika menggabungkannya akan melalui kesalahan "Selesaikan konflik"

Jadi, Anda harus menyelesaikan semua konflik Anda terlebih dahulu, lalu Anda harus melakukan semua perubahan lagi, lalu klik

 git push origin master 

Lebih baik siapa yang membuat perubahan di cabang tes, karena dia tahu perubahan apa yang dia lakukan.

1
07 апр. Jawabannya diberikan oleh Vinay Sikarwar 07 Apr. 2015-04-07 11:55 '15 pada 11:55 2015-04-07 11:55

Utas lama, tetapi saya belum menemukan cara untuk melakukannya. Ini dapat bermanfaat bagi mereka yang bekerja dengan rebase dan ingin menggabungkan semua commit dari cabang di atas wizard. Jika ada satu konflik, Anda dapat menyelesaikannya untuk setiap komit.

Dapatkan master dan cabang diperbarui:

 git checkout master git pull --rebase origin master git checkout <branch_name> git pull --rebase origin <branch_name> 

Gabungkan cabang di atas wizard:

 git checkout <branch_name> git rebase master git add . git rebase continue 

Jika Anda menemukan konflik selama Rebase:

Pertama, selesaikan konflik dalam file. Lalu:

 git add . git rebase --continue 

Setelah rebase selesai, gerakkan cabang di atas wizard:

 git checkout master git rebase <branch_name> 
1
31 окт. Jawabannya diberikan oleh Robin Wieruch pada 31 Oktober. 2018-10-31 07:14 '18 pada 7:14 2018-10-31 07:14

Saya akan menggunakan metode rebase. Terutama karena itu secara sempurna mencerminkan kasus Anda secara semantik, mis. yang ingin Anda lakukan adalah memperbarui status cabang Anda saat ini dan "berpura-pura" seolah-olah itu didasarkan pada yang terakhir.

Karena itu, tanpa memeriksa master , saya akan:

 git fetch origin git rebase -i origin/master # ...solve possible conflicts here 

Tentu saja, hanya sampel dari sumber yang tidak memperbarui kondisi lokal master Anda (karena tidak bergabung), tetapi ini sepenuhnya normal untuk tujuan kami - kami ingin menghindari beralih, untuk menghemat waktu.

1
13 сент. Jawabannya diberikan oleh user776686 13 September 2018-09-13 10:13 '18 jam 10:13 malam 2018-09-13 10:13

Mudah, cukup ikuti >

  • Git checkout checkout
  • Git bergabung
  • Tombol Git di awal dokumen asli ATAU Jika ada kesalahan, Anda juga bisa memaksanya

Git Klik Mulai Wisaya

Apa itu

-38
03 дек. jawabannya diberikan oleh Vinay Sikarwar 03 Desember. 2017-12-03 06:28 '17 pada 6:28 2017-12-03 06:28