Git terjadi! 6 Kesalahan Umum Git dan Cara Memperbaikinya



Catatan perev. : Suatu hari di blog untuk insinyur dari proyek GitLab favorit kami, sebuah catatan kecil namun sangat berguna muncul dengan instruksi yang membantu menghemat waktu dan saraf jika terjadi berbagai masalah yang terjadi saat Anda bekerja dengan Git. Tidak mungkin mereka akan menjadi pengguna baru yang berpengalaman, tetapi pasti akan ada orang-orang yang berguna bagi mereka. Dan di akhir materi ini, kami menambahkan bonus kecil dari diri kami. Selamat menikmati hari Jumat!

Kita semua membuat kesalahan, terutama ketika bekerja dengan sistem yang kompleks seperti Git. Tapi ingat: Git terjadi!

Jika Anda baru memulai dengan Git, pelajari dasar - dasar bekerja dengannya di baris perintah. Dan di sini saya akan berbicara tentang bagaimana Anda dapat memperbaiki enam kesalahan paling umum di Git.

1. Ups ... Saya keliru dalam pesan hingga komit terakhir


Setelah beberapa jam pengkodean, mudah untuk membuat kesalahan dalam pesan komit. Untungnya, ini mudah diperbaiki:

git commit --amend 

Dengan perintah ini, editor teks akan terbuka dan memungkinkan Anda untuk membuat perubahan pada pesan ke komit terakhir. Dan tidak ada yang akan tahu bahwa Anda menulis "ditambahkan" dengan tiga "ds".

2. Ups ... Saya lupa menambahkan file ke komit terakhir


Bug lain yang populer di Git adalah commit yang terlalu terburu-buru. Apakah Anda lupa menambahkan file, lupa menyimpannya, atau haruskah Anda membuat perubahan kecil untuk membuat komit bermakna? Temanmu akan - --amend lagi.

Tambahkan file yang hilang dan jalankan perintah yang benar ini:

 git add missed-file.txt git commit --amend 

Sekarang Anda dapat memperbaiki pesan, atau hanya menyimpannya dalam bentuk aslinya (dengan file yang ditambahkan).

3. Ups ... Saya menambahkan file yang seharusnya tidak ada di repositori ini


Tetapi bagaimana jika Anda memiliki situasi yang berlawanan? Bagaimana jika Anda menambahkan file yang tidak ingin Anda komit? File ENV yang menipu, membangun direktori atau foto dengan kucing yang secara tidak sengaja disimpan di direktori yang salah ... Semuanya terpecahkan.

Jika Anda hanya melakukan tahapan untuk file dan belum berkomitmen, semuanya dilakukan melalui setel ulang sederhana dari file yang diinginkan (terdapat di tahap):

 git reset /assets/img/misty-and-pepper.jpg 

Jika Anda masih melakukan perubahan, diperlukan langkah awal tambahan:

 git reset --soft HEAD~1 git reset /assets/img/misty-and-pepper.jpg rm /assets/img/misty-and-pepper.jpg git commit 

Komit akan digulung kembali, gambar akan dihapus, dan kemudian komit baru akan dibuat.

Catatan perev. : Seperti disebutkan dalam komentar pada artikel asli, masalah ini juga dapat diselesaikan dengan menggunakan --amend telah disebutkan. Rupanya, dengan paragraf ini, penulis ingin menunjukkan apa lagi ada cara untuk mengubah riwayat komitmen untuk memperbaiki kesalahan.

4. Ups ... Saya melakukan perubahan untuk dikuasai


Jadi, Anda sedang mengerjakan fitur baru dan bergegas, lupa membuat cabang baru untuk itu. Anda telah melakukan banyak file dan semua komit ini ada di master. Untungnya, GitLab dapat mencegah push'y langsung di master. Oleh karena itu, kami dapat mengembalikan semua perubahan yang diperlukan ke cabang baru dengan tiga perintah berikut:

Catatan : Pastikan untuk melakukan atau menyembunyikan nol terlebih dahulu perubahan Anda - jika tidak semuanya akan hilang!

 git branch future-brunch git reset HEAD~ --hard git checkout future-brunch 

Cabang baru akan dibuat, master - rollback dibuat ke keadaan di mana sebelum perubahan Anda, dan kemudian checkout cabang baru dibuat dengan semua perubahan Anda.

5. Ups ... Saya membuat kesalahan atas nama cabang


Yang paling penuh perhatian bisa melihat dalam contoh sebelumnya kesalahan dalam nama cabang. Ini hampir jam 3 malam, dan saya masih belum makan malam, jadi rasa lapar saya menyebut cabang baru ( br a nch ) sebagai masa depan-br u nch . Barang!



Ganti nama cabang ini dengan cara yang sama yang digunakan ketika mengganti nama file menggunakan perintah mv , yaitu, menempatkannya di lokasi baru dengan nama yang benar:

 git branch -m future-brunch feature-branch 

Jika Anda sudah mendorong cabang ini, Anda akan memerlukan beberapa langkah tambahan. Kami akan menghapus cabang lama dari jarak jauh dan mendorong yang baru:

 git push origin --delete future-brunch git push origin feature-branch 

Catatan perev. : Anda masih dapat menghapus cabang dari jarak jauh menggunakan:

 git push origin :future-brunch 

6. Ups ... Saya melakukannya lagi!


Perintah terakhir jika semuanya salah. Ketika Anda mengumpulkan dan mendorong banyak solusi dengan Stack Overflow, setelah itu semua yang ada di dalam repositori menjadi lebih buruk daripada di awal. Kita semua pernah menghadapi hal yang sama ...

git reflog menunjukkan daftar semua operasi yang Anda lakukan. Maka itu memungkinkan Anda untuk menggunakan kemampuan perjalanan waktu magis Git, yaitu kembali ke masa lalu dari masa lalu. Saya harus mencatat bahwa ini adalah harapan terakhir Anda - Anda tidak boleh menggunakan itu dalam kasus-kasus sederhana. Jadi, untuk mendapatkan daftarnya, lakukan:

 git reflog 

Setiap langkah kami berada di bawah pengawasan Git. Menjalankan tim pada proyek di atas menghasilkan yang berikut:

 3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed refs/heads/future-brunch to refs/heads/feature-branch 3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to future-brunch 2b7e508 (master) HEAD@{3}: reset: moving to HEAD~ 3ff8691 (HEAD -> feature-branch) HEAD@{4}: commit: Adds the client logo 2b7e508 (master) HEAD@{5}: reset: moving to HEAD~1 37a632d HEAD@{6}: commit: Adds the client logo to the project 2b7e508 (master) HEAD@{7}: reset: moving to HEAD 2b7e508 (master) HEAD@{8}: commit (amend): Added contributing info to the site dfa27a2 HEAD@{9}: reset: moving to HEAD dfa27a2 HEAD@{10}: commit (amend): Added contributing info to the site 700d0b5 HEAD@{11}: commit: Addded contributing info to the site efba795 HEAD@{12}: commit (initial): Initial commit 

Perhatikan kolom paling kiri - ini adalah indeks. Jika Anda ingin kembali ke titik mana pun dalam riwayat, jalankan perintah berikut, ganti {index} dengan nilai yang sesuai (misalnya, dfa27a2 ):

 git reset HEAD@{index} 

Jadi, sekarang Anda memiliki enam cara untuk keluar dari Gitfalls yang paling sering (pun: pitfall diterjemahkan sebagai "trap, error " - approx. Translate. ) .

Bonus dari penerjemah


Pertama, komentar yang berharga tentang semua yang ditulis di atas (kecuali untuk paragraf 5). Perlu diingat bahwa tindakan ini mengubah riwayat komitmen, sehingga harus dilakukan hanya jika perubahan belum dikirim ke jarak jauh (push'nut). Jika tidak, komit lama yang buruk sudah ada di cabang jarak jauh dan Anda harus melakukan git pull (yang akan digabung , dan kemudian mencoba "menghapus" riwayat akan menyebabkan konsekuensi yang lebih buruk), atau git push --force , yang penuh dengan kehilangan data saat bekerja dengan cabang beberapa orang ...



Sekarang - tambahan kecil yang bermanfaat dari pengalaman kami:

  • Jika Anda (tidak sengaja atau tidak) mengubah cabang dan Anda harus kembali ke yang sebelumnya, cara tercepat adalah dengan menggunakan git checkout - .
  • Jika Anda secara tidak sengaja menambahkan file ke komit yang seharusnya tidak ditambahkan di sana, tetapi belum berkomitmen, gunakan git reset HEAD path/to/file . Situasi serupa dijelaskan dalam paragraf 3, tetapi dalam kenyataannya itu lebih luas, karena merujuk pada perubahan yang tidak perlu dalam komit (bukan hanya kasus file tambahan).
  • Merupakan praktik yang baik untuk tidak melakukan terlalu banyak, menggunakan opsi -p saat menambahkan file ke komit ( git add -p ). Ini memungkinkan Anda meninjau setiap perubahan yang masuk ke dalam komit. Tetapi perlu diingat bahwa itu tidak menambahkan file yang tidak terlacak ke komit - mereka perlu ditambahkan tanpa parameter ini.
  • Sejumlah rekomendasi bagus (termasuk yang lebih rumit) dapat ditemukan di artikel 2014 “ Tutorial Git: 10 Masalah Umum Git dan Cara Memperbaikinya ”. Khususnya, perhatikan penggunaan git revert dan git rebase -i .

PS dari penerjemah


Baca juga di blog kami:

Source: https://habr.com/ru/post/id419733/


All Articles