Bagikan melalui


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.

Diagram memperlihatkan penerapan sebelum dan sesudah saat menggunakan rebase Git.

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 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 .

  1. Pilih Git > Kelola Cabang untuk membuka jendela Repositori Git.

    Cuplikan layar opsi Kelola Cabang di menu Git Visual Studio.

  2. Di jendela Repositori Git, klik kanan cabang target dan pilih Checkout.

    Cuplikan layar opsi Checkout di menu konteks cabang di jendela Repositori Git visual Studio.

  3. Klik kanan cabang sumber, dan pilih Rebase <target-branch> ke <cabang> sumber.

    Cuplikan layar opsi Rebase di menu konteks cabang di jendela Repositori Git Visual Studio.

  4. Visual Studio akan menampilkan pesan konfirmasi setelah rebase berhasil.

    Cuplikan layar pesan konfirmasi rebase di jendela Repositori Git visual Studio.

    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.

    Cuplikan layar pesan konflik rebase di jendela Repositori Git visual Studio.

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:

  1. Buka Opsi>Alat>Kontrol>Sumber Git Global Pengaturan.

  2. 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.

  1. Di jendela Perubahan Git, pilih tombol tekan untuk mendorong penerapan Anda.

    Cuplikan layar tombol tekan panah atas di jendela Perubahan Git Visual Studio.

    Atau, Anda dapat memilih Dorong dari menu Git .

    Cuplikan layar opsi Push dari menu Git di Visual Studio.

  2. Jika operasi pendorongan Git default gagal, Visual Studio meluncurkan dialog Git-Push gagal . Pilih Dorong Paksa.

    Cuplikan layar dialog Git-push gagal di Visual Studio.

  3. Visual Studio akan menampilkan pesan konfirmasi setelah pendorongan berhasil.

    Cuplikan layar pesan konfirmasi push di Visual Studio.

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 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.

Langkah berikutnya