Terapkan perubahan dengan rebase
Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Git secara otomatis mempertahankan riwayat pengembangan pada cabang dengan menautkan setiap penerapan baru ke pendahulunya. Ketika Anda menggabungkan satu cabang ke cabang lain, riwayat bisa menjadi kurang mudah. Misalnya, penggabungan tanpa maju cepat menggabungkan garis pengembangan yang berbeda dengan membuat penerapan penggabungan dengan beberapa pendahulu. Sebaliknya, rebase Git menggabungkan garis pengembangan yang berbeda tanpa membuat penerapan penggabungan, yang menghasilkan riwayat penerapan yang lebih sederhana tetapi kehilangan informasi tentang penggabungan. Pilihan jenis penggabungan Anda kemungkinan dipengaruhi oleh apakah Anda ingin mempertahankan catatan penggabungan atau menyederhanakan riwayat penerapan.
Artikel ini membahas kapan harus menggunakan rebase alih-alih penggabungan tanpa penerusan cepat, dan menyediakan prosedur untuk tugas-tugas berikut:
- Rebase cabang lokal Anda
- Dorong paksa cabang lokal Anda setelah rebase
- Rebase interaktif untuk melakukan squash lokal
Untuk gambaran umum alur kerja Git, lihat tutorial Azure Repos Git.
Rebase cabang lokal Anda
Rebase Git mengintegrasikan penerapan dari cabang sumber ke cabang lokal Anda saat ini (cabang target). Cabang sumber tetap tidak berubah. Sebagai perbandingan, rebase Git dan jenis penggabungan lainnya diperlihatkan dalam diagram berikut.
Git rebase mengurutkan ulang riwayat penerapan cabang target sehingga berisi semua penerapan cabang sumber, diikuti oleh semua penerapan cabang target sejak penerapan umum terakhir. Cara lain untuk melihatnya adalah bahwa rebase memutar ulang perubahan di cabang target Anda di atas riwayat cabang sumber. Terutama, Git mengubah urutan penerapan cabang target yang ada, yang bukan kasus untuk strategi penggabungan lainnya. Dalam diagram sebelumnya, commit K' berisi perubahan yang sama dengan K, tetapi memiliki ID penerapan baru karena menautkan kembali ke penerapan E alih-alih C.
Selama rebase, jika perubahan cabang sumber bertentangan dengan perubahan cabang target, Git akan meminta Anda untuk mengatasi konflik penggabungan. Anda dapat mengatasi konflik penggabungan selama rebase dengan cara yang sama seperti Anda mengatasi konflik penggabungan selama penggabungan.
Rebase vs. no-fast-forward merge
Rebasing Git menghasilkan riwayat penerapan yang lebih sederhana tetapi kurang tepat daripada penggabungan tanpa penerusan cepat, atau dikenal sebagai penggabungan tiga arah atau benar . Saat Anda menginginkan rekaman penggabungan dalam riwayat penerapan, gunakan penggabungan tanpa penerusan cepat.
Jika Anda satu-satunya orang yang mengerjakan fitur atau cabang bugfix, pertimbangkan untuk menggunakan rebase untuk mengintegrasikan pekerjaan cabang terbaru main
secara berkala ke dalamnya. Strategi itu membantu memastikan bahwa Anda tetap mengetahui pekerjaan terbaru oleh orang lain dan segera menyelesaikan konflik penggabungan yang muncul. Dengan melakukan rebasing, Anda mengimplementasikan fitur baru Anda di atas pekerjaan cabang terbaru main
, yang membantu mempertahankan riwayat penerapan linier.
Untuk informasi selengkapnya tentang rebase Git dan kapan menggunakannya, lihat Rebase vs merge.
Panduan rebase dan force-push
Jika Anda merebase cabang lokal yang sebelumnya telah Anda dorong, lalu jalankan perintah dorong Git default lagi, pendorongan akan gagal. Perintah dorong Git default menerapkan penggabungan maju cepat untuk mengintegrasikan cabang lokal Anda ke cabang jarak jauh. Perintah itu akan gagal setelah rebase karena rebase mengubah urutan penerapan yang ada di cabang target lokal Anda, sehingga tidak lagi cocok dengan riwayat rekan jarak jauhnya. Dalam skenario ini, dorongan paksa akan berhasil—dengan menimpa cabang jarak jauh.
Rebase Git dan dorongan paksa adalah alat yang kuat, tetapi ingatlah panduan ini saat memutuskan apakah akan menggunakannya:
- Jangan rebase cabang lokal yang telah didorong dan dibagikan dengan orang lain, kecuali Anda yakin tidak ada yang menggunakan cabang bersama. Setelah rebase, cabang lokal Anda tidak akan lagi cocok dengan riwayat rekan jarak jauhnya.
- Jangan paksa dorong ke cabang jarak jauh yang digunakan oleh orang lain, karena versi lokal cabang jarak jauh mereka tidak akan lagi cocok dengan riwayat cabang jarak jauh yang diperbarui.
- Tim Anda harus menyetujui skenario penggunaan untuk rebase dan dorongan paksa.
Tip
Untuk proses peninjauan kolaboratif, gunakan permintaan pull untuk menggabungkan pekerjaan baru ke cabang default repositori jarak jauh.
Cara melakukan rebase
- Visual Studio 2022
- Visual Studio 2019 - Menu Git
- Visual Studio 2019 - Team Explorer
- Baris Perintah Git
Visual Studio 2022 menyediakan pengalaman kontrol versi Git dengan menggunakan menu Git, Perubahan Git, dan melalui menu konteks di Penjelajah Solusi. Visual Studio 2019 versi 16.8 juga menawarkan antarmuka pengguna Team Explorer Git. Untuk informasi selengkapnya, lihat tab Visual Studio 2019 - Team Explorer .
Pilih Git > Kelola Cabang untuk membuka jendela Repositori Git.
Di jendela Repositori Git, klik kanan cabang target dan pilih Checkout.
Klik kanan cabang sumber, dan pilih Rebase <target-branch> ke <cabang> sumber.
Visual Studio akan menampilkan pesan konfirmasi setelah rebase berhasil.
Jika rebase dihentikan karena konflik penggabungan, Visual Studio akan memberi tahu Anda. Anda dapat mengatasi konflik, atau membatalkan rebase dan kembali ke status pra-rebase.
Dorong paksa cabang lokal Anda setelah rebase
Jika Anda melakukan rebase cabang lokal yang sebelumnya telah Anda dorong, pendorongan Git default berikutnya akan gagal. Sebagai gantinya, Anda dapat memaksa mendorong cabang lokal Anda untuk menimpa rekan jarak jauhnya sehingga riwayat penerapannya cocok.
Peringatan
Jangan pernah memaksa mendorong cabang yang sedang dilalui orang lain. Untuk informasi selengkapnya, lihat Panduan rebase dan dorong paksa.
Untuk memaksa pendorongan di Visual Studio, Anda harus terlebih dahulu mengaktifkan opsi dorong paksa:
Buka Opsi>Alat>Kontrol>Sumber Git Global Pengaturan.
Pilih opsi Aktifkan push --force-with-lease.
Bendera dorong --force-with-lease
Git lebih aman daripada --force
bendera karena tidak akan menimpa cabang jarak jauh yang memiliki penerapan yang tidak terintegrasi dalam cabang lokal yang Anda dorong paksa.
- Visual Studio 2022
- Visual Studio 2019 - Menu Git
- Visual Studio 2019 - Team Explorer
- Baris Perintah Git
Di jendela Perubahan Git, pilih tombol tekan untuk mendorong penerapan Anda.
Atau, Anda dapat memilih Dorong dari menu Git .
Jika operasi pendorongan Git default gagal, Visual Studio meluncurkan dialog Git-Push gagal . Pilih Dorong Paksa.
Visual Studio akan menampilkan pesan konfirmasi setelah pendorongan berhasil.
Rebase interaktif untuk melakukan squash lokal
Biasanya, saat Anda mengerjakan fitur baru di cabang fitur lokal, Anda akan membuat beberapa penerapan. Saat Anda siap untuk menerbitkan fitur baru, Anda mungkin ingin mengonsolidasikan penerapan tersebut ke dalam satu penerapan untuk menyederhanakan riwayat penerapan. Anda dapat menggunakan rebase interaktif untuk melakukan squash beberapa penerapan ke dalam satu penerapan.
- Visual Studio 2022
- Visual Studio 2019 - Menu Git
- Visual Studio 2019 - Team Explorer
- Baris Perintah Git
Visual Studio 2022 tidak mendukung rebasing interaktif. Gunakan baris perintah Git sebagai gantinya.
Catatan
Pengguna Azure DevOps dapat melakukan squash merge untuk mengembun riwayat penerapan cabang topik selama permintaan pull.