Git adalah sistem yang praktis namun rumit. Kesulitannya, pertama-tama, adalah bahwa melalui kecerobohan Anda bisa membuat kesalahan, yang kemudian sulit atau bahkan tidak mungkin untuk diperbaiki. Dokumentasi Git memberikan penjelasan tentang banyak perintah untuk membantu Anda memperbaiki bug.
Tetapi masalahnya, untuk memperbaiki masalah, Anda perlu mengetahui nama perintah yang tepat. Dan di sini kita memiliki masalah ayam dan telur yang khas. Artikel ini menjelaskan perintah yang membantu Anda memecahkan situasi masalah.
Sial, aku melakukan sesuatu yang salah. Beri aku mesin waktu ajaib!
git reflog # you will see a list of every thing you've # done in git, across all branches! # each one has an index HEAD@{index} # find the one before you broke everything git reset HEAD@{index} # magic time machine
Perintah ini memungkinkan Anda memulihkan data yang tidak sengaja terhapus dengan mengembalikan penggabungan yang menyebabkan masalah. refLog sangat sering digunakan - ucapkan terima kasih karena telah menyarankan untuk menambahkan perintah ini.
Saya membuat komit, tetapi segera menyadari ada kesalahan, itu perlu diperbaiki!
# make your change git add . # or add individual files git commit --amend --no-edit # now your last commit contains that change! # WARNING: never amend public commits
Perintah tersebut memungkinkan untuk memperbaiki hal-hal kecil yang tidak menyenangkan - ketika Anda melakukan sesuatu, dan kemudian melihat masalah seperti spasi yang hilang setelah tanda "=". Ya, dimungkinkan untuk membuat perubahan dengan komit baru dengan menggabungkan keduanya dengan rebase -i. Tapi jalannya masih panjang.
NB! Jangan pernah mengubah komit di cabang publik. Gunakan perintah hanya untuk komit di cabang lokal, jika tidak, Anda akan mengalami masalah.
Saya ingin mengubah pesan dari komit terakhir!
git commit --amend # follow prompts to change the commit message
Itu hanya ... persyaratan posting yang bodoh.
Saya tidak sengaja berkomitmen untuk menjadi master, meskipun seharusnya di cabang baru!
# create a new branch from the current state of master git branch some-new-branch-name # remove the last commit from the master branch git reset HEAD~ --hard git checkout some-new-branch-name # your commit lives in this branch now :)
Jika Anda sudah berkomitmen ke utas publik, perintah tidak akan berfungsi. Dalam kasus ini, git reset HEAD @ {tentukan jumlah komit yang akan dikembalikan}, bukan HEAD ~.
Ya, saya salah berkomitmen ke cabang yang salah
# undo the last commit, but leave the changes available git reset HEAD~ --soft git stash # move to the correct branch git checkout name-of-the-correct-branch git stash pop git add . # or add individual files git commit -m "your message here"; # now your changes are on the correct branch
Ada cara lain yang digunakan banyak developer untuk menggunakan cherry-pick.
git checkout name-of-the-correct-branch # grab the last commit to master git cherry-pick master # delete it from master git checkout master git reset HEAD~ --hard
Saya perlu menjalankan diff, tetapi tidak ada yang berhasil.
Jika Anda yakin bahwa perubahan telah dilakukan, tetapi diff kosong, mungkin Anda mengindeks perubahan melalui add. Karena itu, ada baiknya menggunakan bendera khusus.
git diff --staged
Secara umum, ini bukan bug, tetapi fitur, tetapi sangat jelas Β― \ _ (γ) _ / Β―
Saya sangat ingin membatalkan komit yang dibuat 5 komit yang lalu
# find the commit you need to undo git log # use the arrow keys to scroll up and down in history # once you've found your commit, save the hash git revert [saved hash] # git will create a new commit that undoes that commit # follow prompts to edit the commit message # or just save and commit
Untungnya, Anda tidak perlu mengembalikan 5 komit dengan menyalin dan menempelkan file lama dan baru. Anda dapat membatalkan semua ini dengan pengembalian.
Selain itu, Anda tidak hanya dapat melakukan rollback pada komit, tetapi juga seluruh file. Benar, ini sudah menjadi perintah lain ...
Batalkan perubahan dalam file
Dan ini dia, perintah lainnya ini.
# find a hash for a commit before the file was changed git log # use the arrow keys to scroll up and down in history # once you've found your commit, save the hash git checkout [saved hash] -- path/to/file # the old version of the file will be in your index git commit -m "Wow, you don't have to copy-paste to undo"
Ketika saya pertama kali menemukan kesempatan ini, itu COOL, COOL, K-R-U-T-O. Tetapi jika Anda memikirkannya - mengapa checkout adalah opsi terbaik untuk membuang perubahan dalam file? : shakes-fist-at-linus-torvalds:
Semuanya, saya menyerah
cd .. sudo rm -r fucking-git-repo-dir git clone https://some.github.url/fucking-git-repo-dir.git cd fucking-git-repo-dir
Terima kasih kepada Eric V. Untuk metode ini. Dan sampaikan semua keluhan tentang penggunaan sudo kepadanya.
Jika Anda perlu menghilangkan perubahan dan mengembalikan sepenuhnya ke versi aslinya, Anda dapat mencoba melakukannya. Tapi ingat - perintah ini merusak dan tidak bisa diubah.
# get the lastest state of origin git fetch origin git checkout master git reset --hard origin/master # delete untracked files and directories git clean -d --force # repeat checkout/reset/clean for each borked branch
Perhatian! Artikel ini tidak dimaksudkan sebagai panduan komprehensif. Dan ya, ada cara lain untuk melakukan hal yang sama, dan bahkan lebih baik. Tapi saya menemukan opsi ini dengan coba-coba. Kemudian saya mendapat ide gila untuk membagikan temuan saya. Ambil atau pergi!
Komentar ahli
Daniil Pilipenko , direktur pusat perekrutan spesialis TI di SymbioWay dan penginjil backend universitas online Skillbox, menambahkan pendapatnya tentang Git dan relevansinya bagi pengembang.
Git muncul pada tahun 2005, dan butuh waktu lama untuk mengambil alih pasar. Saya ingat ketika kami menerapkan SVN di tim pengembangan pada tahun 2008. Dan bahkan pada tahun 2012, sebuah perusahaan yang dekat dengan saya menerapkan Mercurial dengan gencar. Selama bertahun-tahun, telah menjadi jelas bagi banyak orang bahwa Git adalah sistem kontrol versi terbaik dan sekarang digunakan oleh hampir semua pengembang.
Jika Anda seorang pengembang pemula yang ingin melamar pekerjaan, pastikan untuk mempelajari Git! Anda harus tahu apa itu sistem kontrol versi dan mengapa itu diperlukan, apa itu komit, cabang, bagaimana mengkloning repositori dan mengirim perubahan yang dibuat ke server, bagaimana mendapatkan perubahan baru dari server, bagaimana menggabungkan, jenis βresetβ apa yang ada di sana. Pada awalnya, topik ini mungkin tampak tidak dapat dipahami dan sulit bagi Anda, tetapi Anda hanya perlu membiasakan diri menggunakan Git, dan Anda tidak akan dapat menghentikannya.