Terapkan perubahan dengan rebase

Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Visual Studio 2019 | Visual Studio 2022

Petunjuk / Saran

Anda dapat menggunakan AI untuk membantu tugas Azure DevOps. Lihat Aktifkan bantuan AI dengan Azure DevOps MCP Server untuk memulai.

Git secara otomatis mempertahankan riwayat pengembangan pada cabang dengan menautkan setiap commit baru ke pendahulunya. Ketika Anda menggabungkan satu cabang ke cabang lain, riwayatnya bisa menjadi lebih rumit. Misalnya, penggabungan tanpa cepat-maju menggabungkan jalur pengembangan yang berbeda dengan membuat commit penggabungan dengan beberapa pendahulu. Sebaliknya, git rebase 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 keinginan Anda untuk mempertahankan catatan penggabungan atau menyederhanakan riwayat commit.

Artikel ini membahas kapan harus menggunakan rebase alih-alih merge tanpa fast-forward, dan menyediakan prosedur untuk tugas-tugas berikut:

  • Rebase cabang lokal Anda
  • Dorong paksa cabang lokal Anda setelah melakukan rebase
  • Rebase interaktif untuk menggabungkan komit lokal

Untuk gambaran umum alur kerja Git, lihat tutorial Azure Repos Git.

Prasyarat

Kategori Persyaratan
Akses proyek Anggota proyek .
Permissions - Lihat kode dalam proyek pribadi: Setidaknya akses Dasar .
- Mengkloning atau berkontribusi pada kode dalam proyek privat: Menjadi anggota dari grup keamanan Kontributor atau memiliki izin yang diperlukan dalam proyek.
- Mengatur izin cabang atau repositori: Mengelola izin adalah izin untuk cabang atau repositori.
- Mengubah cabang default: Kebijakan pengeditan merupakan izin untuk repositori.
- Impor repositori: Anggota Administrator Proyek grup keamanan atau tingkat proyek Git Buat repositori dengan izin diatur ke Izinkan. Untuk informasi selengkapnya, lihat Mengatur izin repositori Git.
Services Repos diaktifkan.
Tools Fakultatif. Gunakan az repos perintah: Azure DevOps CLI.

Nota

Dalam proyek publik, pengguna dengan akses Stakeholder memiliki akses penuh ke Azure Repos, termasuk melihat, menyalin, dan berkontribusi pada kode.

Kategori Persyaratan
Akses proyek Anggota proyek .
Permissions - Lihat kode: Setidaknya akses Dasar.
- Mengkloning atau berkontribusi pada kode: Anggota kelompok keamanan Kontributor atau memiliki izin yang sesuai di dalam proyek.
Services Repos diaktifkan.

Rebase cabang lokal Anda

Git rebase mengintegrasikan komit dari cabang asal 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. Perlu dicatat, Git rebase mengubah urutan commit pada cabang target yang ada, yang tidak terjadi pada strategi merge 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.

Dalam proses rebase, jika perubahan cabang sumber mengalami konflik dengan perubahan cabang target, Git akan menginstruksikan Anda untuk menyelesaikan konflik penggabungan. Anda dapat mengatasi konflik penggabungan selama rebase dengan cara yang sama seperti Anda mengatasi konflik penggabungan selama penggabungan.

Rebase vs. penggabungan tanpa fast-forward

Rebasing Git menghasilkan riwayat penerapan yang lebih sederhana tetapi kurang tepat daripada penggabungan tanpa penerusan cepat, atau dikenal sebagai penggabungan tiga-arah atau penggabungan sebenarnya. Saat Anda menginginkan rekaman penggabungan dalam riwayat commit, gunakan penggabungan tanpa fast-forward.

Jika Anda satu-satunya orang yang mengerjakan fitur atau cabang bugfix, pertimbangkan untuk menggunakan rebase untuk mengintegrasikan pekerjaan terbaru dari cabang main secara berkala ke dalamnya. Strategi itu membantu memastikan bahwa Anda tetap mengetahui pekerjaan terbaru orang lain dan segera menyelesaikan konflik merger yang timbul. Dengan melakukan rebasing, Anda menerapkan fitur baru Anda di atas pekerjaan cabang main terbaru, yang membantu mempertahankan riwayat penerapan linier.

Untuk informasi selengkapnya tentang rebase Git dan kapan menggunakannya, lihat Rebase vs merge.

Pedoman rebase dan force-push

Jika Anda merebase cabang lokal yang sebelumnya telah Anda mendorong, lalu menjalankan 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, force push akan berhasil—dengan menggantikan cabang jarak jauh.

Rebase Git dan force push adalah alat yang kuat, tetapi ingat panduan ini saat memutuskan untuk menggunakannya:

  • Jangan rebase cabang lokal yang sudah di-push dan dibagikan dengan orang lain, kecuali Anda yakin tidak ada yang menggunakan cabang yang dibagikan tersebut. Setelah rebase, cabang lokal Anda tidak akan lagi cocok dengan riwayat rekan jarak jauhnya.
  • Jangan paksa melakukan push ke cabang remote yang digunakan oleh orang lain, karena versi lokal dari cabang remote mereka tidak akan lagi sesuai dengan riwayat cabang remote yang diperbarui.
  • Tim Anda harus menyetujui skenario penggunaan untuk rebase dan force push.

Petunjuk / Saran

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

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

  3. Klik kanan cabang sumber, dan pilih Rebase <cabang target> 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 menyelesaikan konflik, atau membatalkan rebase dan kembali ke keadaan sebelum rebase.

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

Dorong paksa cabang lokal Anda setelah melakukan rebase

Jika Anda melakukan rebase cabang lokal yang sebelumnya telah Anda dorong, dorongan 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 push cabang yang sedang dikerjakan orang lain. Untuk informasi selengkapnya, lihat Rebase dan panduan pendorongan paksa.

Untuk memaksa push di Visual Studio, Anda harus terlebih dahulu mengaktifkan pilihan push paksa.

  1. Pergi ke Peralatan>Opsi>Kontrol Sumber>Pengaturan Global Git.

  2. Pilih opsi Aktifkan push --force-with-lease.

Bendera --force-with-lease pendorongan Git lebih aman daripada bendera --force karena tidak akan menimpa cabang remote yang memiliki commit yang belum terintegrasi dalam cabang lokal yang sedang Anda push paksa.

  1. Di jendela Perubahan Git, pilih tombol push untuk mengirimkan commit Anda.

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

    Atau, Anda dapat memilih Push dari menu Git.

    Cuplikan layar opsi Push dari menu Git di Visual Studio.

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

    Cuplikan layar dialog kegagalan Git-push di Visual Studio.

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

    Cuplikan layar pesan konfirmasi push di Visual Studio.

Rebase interaktif untuk menggabungkan komit lokal

Biasanya, saat Anda mengerjakan fitur baru di cabang fitur lokal, Anda akan membuat beberapa komit. 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 "squash" beberapa komit menjadi satu komit.

Visual Studio 2022 tidak mendukung rebasing interaktif. Gunakan baris perintah Git sebagai gantinya.

Nota

Pengguna Azure DevOps dapat penggabungan squash untuk mengembun riwayat penerapan cabang topik selama permintaan pull.

Langkah berikutnya