Aku hanya tidak mengerti ini. Saya telah membaca banyak di web dan buku-buku dan ada sesuatu yang tidak ada di kepala saya. Dapatkah seseorang tolong beri saya versi boneka dari yang berikut:
- git fetch vs pull
- git merge vs rebase
Aku hanya tidak mengerti ini. Saya telah membaca banyak di web dan buku-buku dan ada sesuatu yang tidak ada di kepala saya. Dapatkah seseorang tolong beri saya versi boneka dari yang berikut:
Jawaban:
fetch akan mengunduh perubahan apa pun dari cabang * remote, memperbarui data repositori Anda, tetapi membiarkan cabang * lokal Anda tidak berubah.
pullakan melakukan fetchdan tambahan mergeperubahan ke cabang lokal Anda.
Apa bedanya? pullmemperbarui cabang lokal Anda dengan perubahan dari cabang yang ditarik. A fetchtidak memajukan cabang lokal Anda.
Diberikan sejarah berikut:
C --- D --- E lokal
/
A --- B --- F --- G jarak jauh
mergebergabung dengan dua sejarah perkembangan bersama. Ini melakukan ini dengan memutar ulang perubahan yang terjadi di cabang lokal Anda setelah itu menyimpang di atas cabang jarak jauh, dan mencatat hasilnya dalam komit baru. Operasi ini mempertahankan leluhur dari setiap komit.
Efek dari mergeakan:
C --- D --- E lokal
/ \
A --- B --- F --- G --- H jarak jauh
rebaseakan mengambil komit yang ada di cabang lokal Anda dan menerapkannya di atas cabang jarak jauh. Operasi ini menulis ulang leluhur dari komitmen lokal Anda.
Efek dari rebaseakan:
C '- D' - E 'lokal
/
A --- B --- F --- G jarak jauh
Apa bedanya? A mergetidak mengubah leluhur dari komitmen. A rebase
menulis ulang nenek moyang dari komitmen lokal Anda.
*Penjelasan ini mengasumsikan bahwa cabang saat ini adalah cabang lokal, dan cabang yang ditentukan sebagai argumen untuk fetch, pull, merge, atau rebasemerupakan cabang terpencil. Ini adalah kasus yang biasa. pull, misalnya, akan mengunduh perubahan dari cabang yang ditentukan , memperbarui repositori Anda dan mergeperubahan ke cabang saat ini .
Ambil vs Tarik
Git fetch hanya memperbarui data repo Anda, tetapi tarikan git pada dasarnya akan melakukan pengambilan dan kemudian menggabungkan cabang yang ditarik
Apa perbedaan antara 'git pull' dan 'git fetch'?
Gabungkan vs Rebase
dari Atlassian SourceTree Blog, Merge or Rebase :
Penggabungan menyatukan dua garis pembangunan sekaligus menjaga leluhur dari masing-masing sejarah komit.
Sebaliknya, rebasing menyatukan garis-garis perkembangan dengan menulis ulang perubahan dari cabang sumber sehingga mereka muncul sebagai anak-anak dari cabang tujuan - secara efektif berpura-pura bahwa komit itu ditulis di atas cabang tujuan selama ini.
Juga, periksa Learn Git Branching , yang merupakan permainan bagus yang baru saja diposkan ke HackerNews ( tautan ke pos ) dan ajarkan banyak trik bercabang dan menggabungkan. Saya percaya ini akan sangat membantu dalam hal ini.
git merge <remote>/<branch>. misalnya, jika Anda adalah cabang master dan remote Anda bernama asal, Anda dapat melakukannya git merge origin/master.
pull vs fetch :
Cara saya memahami ini, adalah yang git pullhanya git fetchdiikuti oleh git merge. Yaitu Anda mengambil perubahan dari cabang jauh dan kemudian menggabungkannya ke cabang saat ini.
menggabungkan vs rebase :
Gabungan akan melakukan seperti yang dikatakan perintah; menggabungkan perbedaan antara cabang saat ini dan cabang yang ditentukan (ke dalam cabang saat ini). Yaitu perintah git merge another_branchakan menggabungkan another_branchke cabang saat ini.
Rebase bekerja sedikit berbeda dan agak keren. Katakanlah Anda melakukan perintah git rebase another_branch. Git pertama akan menemukan versi umum terbaru antara cabang saat ini dan another_branch. Yaitu titik sebelum cabang bercabang. Kemudian git akan memindahkan titik divergen ini ke kepala another_branch. Akhirnya, semua komit di cabang saat ini karena titik divergen asli diputar ulang dari titik divergen baru. Ini menciptakan sejarah yang sangat bersih, dengan lebih sedikit cabang dan gabungan.
Namun, ini bukan tanpa jebakan! Karena riwayat versi "ditulis ulang", Anda hanya boleh melakukan ini jika komit hanya ada di repo git lokal Anda. Yaitu: Jangan pernah melakukan ini jika Anda telah mendorong komit ke repo jarak jauh.
Penjelasan tentang rebasing diberikan dalam ini buku online adalah cukup baik, dengan mudah memahami ilustrasi.
tarik dengan rebasing alih-alih bergabung
Saya sebenarnya menggunakan rebase cukup banyak, tetapi biasanya dikombinasikan dengan tarikan:
git pull --rebase
akan mengambil perubahan jarak jauh dan kemudian rebase alih-alih bergabung. Yaitu itu akan mengulang semua komit lokal Anda dari terakhir kali Anda melakukan tarikan. Saya menemukan ini jauh lebih bersih daripada melakukan tarikan normal dengan penggabungan, yang akan membuat komit tambahan dengan penggabungan.
Penggabungan - KEPALA cabang akan menghasilkan komit baru, melestarikan nenek moyang dari setiap sejarah komit. Sejarah dapat tercemar jika komit gabungan dibuat oleh banyak orang yang bekerja pada cabang yang sama secara paralel.
Rebase - Menulis ulang perubahan dari satu cabang ke cabang lain tanpa membuat komit baru. Riwayat kode disederhanakan, linier dan dapat dibaca tetapi tidak berfungsi dengan permintaan tarik, karena Anda tidak dapat melihat perubahan kecil apa yang dilakukan seseorang.
Saya akan gunakan git mergeketika berhadapan dengan alur kerja berbasis fitur atau jika saya tidak terbiasa dengan rebase. Tetapi, jika saya ingin yang lebih bersih, sejarah linear maka git rebaselebih tepat. Untuk detail lebih lanjut pastikan untuk memeriksa artikel gabungan ini atau rebase .