Memahami simplifikasi histori Git
Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019
Penyederhanaan riwayat Git bisa menjadi binatang buas yang membingungkan. 99% dari waktu Anda bahkan tidak akan tahu itu ada, tetapi kadang-kadang akan melompat keluar dari sudut-sudut gelap Git dan menggigit Anda. Dalam artikel ini, kita akan menjelajahi apa itu penyederhanaan riwayat dan bagaimana hal itu dapat menyebabkan kebingungan saat melihat riwayat file.
Mari kita mulai dengan skenario umum:
- Anda mendorong perubahan ke file lalu menggabungkan perubahan menjadi utama.
- Beberapa kolega Anda juga menggabungkan cabang mereka ke utama.
- Anda kembali beberapa waktu kemudian dan melihat perubahan Anda hilang.
- Mencari pelakunya, Anda pergi melihat riwayat file dan pemberitahuan ... perubahan Anda bahkan tidak tercantum!?
Riwayat penerapan Git adalah pohon. Terkadang, riwayat kronologis tidak sama dengan riwayat pohon file yang sebenarnya. Situasi ini paling sering terjadi ketika penerapan penggabungan mengembalikan file kembali ke status aslinya. Dalam hal ini, tampilan riwayat default tidak akan benar-benar menunjukkan semua perubahan, karena secara teknis file tidak berubah. Dalam skenario ini, Git menyadari bahwa itu dapat menyederhanakan riwayat dan "perubahan" yang kemungkinan besar Anda cari dihapus dari log.
Kecuali Anda telah mengalaminya sebelumnya, Anda mungkin menjadi frustrasi, bertanya-tanya Di mana sih melakukan perubahan saya pergi?
Penyederhanaan riwayat: Aktif secara Default
Secara default, menjalankan perintah log pada file: git log file.txt
akan secara otomatis menyederhanakan riwayat, mungkin menyembunyikan beberapa penerapan dari outputnya. Untuk informasi selengkapnya, lihat halaman git log man.
Apa yang menambah kebingungan adalah bahwa penyederhanaan riwayat tidak terjadi jika Anda hanya menjalankan git log
, karena Anda melihat semua perubahan tidak ada yang perlu disederhanakan.
Untuk menonaktifkan penyederhanaan riwayat, Anda perlu menggunakan sakelar --full-history
baris perintah .
Contoh Penyederhanaan Riwayat
Untuk lebih memahami cara kerja penyederhanaan, kami membuat contoh penyederhanaan riwayat kami sendiri. Pertama, mari kita lihat diagram riwayat yang akan kita buat:
Seperti yang Anda lihat, kita akan:
- Buat file .
- Tambahkan baris ke file tersebut di cabang (hewan).
- Tambahkan baris yang berbeda ke file tersebut di cabang lain (buah).
- Gabungkan hewan cabang kembali ke utama.
- Gabungkan buah cabang kembali ke utama, dan pilih seluruh salinan file dari cabang buah.
- Periksa riwayat file.
Git akan menyederhanakan sejarah bagi kita. Langkah 5 adalah kuncinya di sini. Kami mengabaikan semua perubahan dari cabang hewan . Git akan melihat bahwa file kami pada dasarnya tidak berubah antara langkah 1 dan langkah 5, sehingga hanya akan menunjukkan kepada kita dua entri riwayat.
Pertama, kita membuat file dan menambahkannya ke repositori kita:
> cd sample
> git init
> echo "some content" > test.txt
> git add test.txt
> git commit -m "Initial commit"
Sekarang kami memutuskan untuk menambahkan teks "keledai" ke file di cabang hewan:
> git checkout -b animals
> echo "donkeys" >> test.txt
> git commit -am "We have added an animal"
Saat kita bereksperimen, kita memutuskan mungkin kita ingin pergi dengan buah dalam file kita sebagai gantinya, jadi kita membuat cabang yang berbeda dan menambahkan teks "pisang" di akhir file sebagai gantinya:
> git checkout main -b fruit
> echo "bananas" >> test.txt
> git commit -am "We have added a fruit"
Merasa puas dengan perubahan kami, kami memutuskan untuk menggabungkan cabang hewan kami kembali ke utama:
> git checkout main
> git merge animals
Sekarang mari kita lihat log untuk file kita test.txt
:
> git log test.txt
commit 6b33d99b996c430a60c9552b79245d1aa8320339
Date: Mon Feb 15 10:45:33 2016 -0500
We have added an animal
commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
Date: Mon Feb 15 10:44:18 2016 -0500
Initial commit
Sejauh ini begitu baik, kan? Tidak ada yang terlihat luar biasa dalam output log kami. Sekarang katakanlah kita berubah pikiran dan memutuskan untuk menggabungkan cabang buah kita:
>git merge fruit
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
Uh-oh, konflik penggabungan. Setelah beberapa pertimbangan, kami memutuskan untuk menggunakan seluruh test.txt
file dari cabang buah kami. Biasanya Anda akan menggunakan semacam editor teks atau alat penggabungan, tetapi kami hanya akan membuat ulang seluruh file, karena hanya dua baris:
> echo "some content" > test.txt
> echo "bananas" >> test.txt
> git commit -am "Fixed merge conflict"
Sekarang mari kita lihat riwayat untuk file kita test.txt
:
> git log test.txt
commit fdd4dfd816c4efebc5bdb240f49e934e299db581
Date: Mon Feb 15 10:51:06 2016 -0500
We have added a fruit
commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
Date: Mon Feb 15 10:44:18 2016 -0500
Initial commit
Tentu saja, kita tidak melihat perubahan apa pun dari eksperimen pertama kita di log, kita juga tidak melihat penggabungan kita! Apakah mereka masih di sana? Apakah Git menghilangkan perubahan sepenuhnya?
> git log --full-history test.txt
Seperti yang Anda lihat, meskipun menyederhanakan log tanpa full-history
bendera, Git telah menyimpan semua perubahan kami:
> commit 5d0bb77a24e265dc154654fb3b5be331b53bf977
Merge: 6b33d99 fdd4dfd
Date: Mon Feb 15 10:59:34 2016 -0500
Fixed merge conflict
commit fdd4dfd816c4efebc5bdb240f49e934e299db581
Date: Mon Feb 15 10:51:06 2016 -0500
We have added a fruit
commit 6b33d99b996c430a60c9552b79245d1aa8320339
Date: Mon Feb 15 10:45:33 2016 -0500
We have added an animal
commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
Date: Mon Feb 15 10:44:18 2016 -0500
Initial commit
Ringkasan penyederhanaan riwayat Git
Hal tentang penyederhanaan sejarah adalah bahwa sebagian besar waktu Anda tidak akan pernah menyadarinya. Tetapi ketika konflik penggabungan salah dan Anda ingin tahu apa yang terjadi, Anda mungkin menemukan diri Anda melihat riwayat log git dan bertanya-tanya ke mana perubahan Anda pergi.
Sekarang, alih-alih panik, Anda tahu bahwa:
- Penyederhanaan riwayat untuk file diaktifkan secara default
--full-history
Bendera akan memberi Anda riwayat file yang lebih komprehensif
Pembaruan: Karena saya menulis artikel ini, Azure DevOps Services telah memperkenalkan sejumlah opsi tampilan riwayat yang mengagumkan di web. Apa artinya ini adalah bahwa jika Anda tidak ingin masuk ke slogging melalui baris perintah, Anda cukup menarik file yang ingin Anda lihat riwayatnya di penjelajah kami dan Anda akan disajikan dengan filter riwayat di bawah ini di mana Anda dapat menentukan tampilan riwayat sederhana atau tidak sederhana:
(c) 2016 Microsoft Corporation. Semua hak dilindungi undang-undang. Dokumen ini disediakan "apa adanya." Informasi dan tampilan yang dinyatakan dalam dokumen ini, termasuk URL dan referensi situs Web Internet lainnya, dapat berubah tanpa pemberitahuan. Anda menanggung risiko menggunakannya.
Dokumen ini tidak memberikan hak hukum apa pun kepada Anda atas kekayaan intelektual apa pun di semua produk Microsoft. Anda dapat menyalin dan menggunakan dokumen ini sebagai referensi internal.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk