Bagaimana cara menanganinya ketika komit dalam proses tiba-tiba muncul tergantung pada yang lain yang belum ada?

13

Saya tidak berpengalaman dengan Git tetapi saya mencoba yang terbaik untuk membiasakan diri dengannya, dan sejauh ini saya hanya menggunakannya untuk proyek yang saya kerjakan sendiri.

Ketika saya kode ada beberapa pendekatan top-down secara alami (karena saya tidak tahu masa depan), dan ada tema yang berulang:

Saya melakukan beberapa pekerjaan.
Saya menemukan bahwa untuk menjadikan pekerjaan saya sesuatu yang "dapat dilakukan", saya perlu melakukan pekerjaan lain.
Pekerjaan lain layak untuk dilakukan sendiri.

Maksud saya adalah sesuatu yang mengkompilasi atau sesuatu yang tidak berantakan total.
Dan dengan sesuatu yang pantas dilakukan dengan komitmen sendiri, saya merujuk pada hal yang saya pelajari bahwa komitmen harus melakukan hanya satu hal.

Cara saya menyelesaikannya rumit. Jika pekerjaan lain ada di file lain saya membuat cabang baru, komit di sana, dan bergabung. Jika pekerjaan ada di file yang sama .. ugh .. Saya membuat salinan lokal dan mereset file ke keadaan di HEAD, buat komit yang diperlukan dan kemudian mulai mengembalikan pekerjaan saya dari salinan. Bagaimana seharusnya saya menanganinya? Saya tidak membayangkan ini jalannya, bukan? Saya tidak berasumsi demikian karena itu harus sering muncul ke semua orang (yang tidak tahu masa depan juga, setidaknya). Atau mungkin sepertinya alur kerja saya cenderung cacat?

MasterMastic
sumber
1
Saya menemukan diri saya dalam situasi yang sama cukup sering, biasanya ketika menambahkan perpustakaan dan konfigurasi. Saya hanya menggunakan git statusuntuk melihat semua file yang diubah, dan membuat dua atau lebih melakukan dengan menggunakan git adddengan file tertentu (bukan git add --all), dan melakukan sepotong demi sepotong.
Chris Cirefice
Anda dapat memilih bagian file dengan git add -pdan kemudian hanya melakukan bagian-bagian itu. Ini adalah teknik yang sangat kuat dan saya menggunakannya hampir setiap saat.
eush77

Jawaban:

17

Ada beberapa cara untuk mengatasi ini.

Jika Anda ingin melakukan perubahan untuk komit pertama tanpa mengganggu perubahan Anda saat ini, Anda mungkin ingin menggunakannya git stash. Ini akan membuat semua perubahan terbuka Anda, memungkinkan Anda untuk mengembalikannya nanti. Gunakan git statusuntuk melihat bahwa mereka tidak ada lagi. Sekarang buat komit pertama seperti yang biasa Anda lakukan. Selanjutnya Anda dapat menggunakan git stash popuntuk mengembalikan perubahan asli Anda dan membuat komit kedua, melakukan pekerjaan utama Anda.

Cara lain adalah dengan melakukan semua perubahan yang diperlukan dan kemudian membuat dua komit, keduanya berisi bagian dari pekerjaan Anda. Untuk melakukannya, Anda bisa menggunakan indeks (juga dikenal sebagai area pementasan) yang disediakan oleh git. Ini adalah area khusus yang dapat Anda gunakan untuk menyiapkan komitmen. Dengan asumsi Anda telah mengubah banyak file, Anda dapat menambahkan masing-masing ke indeks menggunakan git add. Ketika melakukan git commithanya file yang ditambahkan ke indeks yang akan dikomit. git statusakan menunjukkan kepada Anda bagian mana dari perubahan Anda yang akan dilakukan dan mana yang tidak. Misalnya akan terlihat seperti ini setelah mengubah file a.txt, b.txt dan c.txt dan setelah itu melakukan git add a.txt:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   a.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   b.txt
        modified:   c.txt

Saat Anda melakukan git commitdalam kondisi ini, hanya perubahan ke a.txt yang akan ditambahkan ke komit Anda.

Tambahan Anda dapat meninjau perubahan yang tepat untuk dilakukan menggunakan git diff --cached, yang akan menunjukkan kepada Anda perbedaan dari semua perubahan yang akan dilakukan.

Jika satu file berisi perubahan untuk kedua komit, Anda juga dapat menambahkan hanya sebagian saja ke indeks dengan menggunakan "git add --patch b.txt". git akan memberi Anda mode interaktif yang meminta Anda untuk setiap perubahan pada file yang diberikan jika harus ditambahkan ke indeks. Ini mungkin menjadi lebih sulit jika Anda memiliki perubahan garis di samping satu sama lain, yang perlu dibagi dalam dua komitmen, namun ada cara untuk menyelesaikannya juga.

Jika Anda ingin mempelajari lebih lanjut tentang area pementasan, Anda mungkin ingin membaca ini: http://gitready.com/beginner/2009/01/18/the-staging-area.html

Anda juga mungkin ingin membaca lebih lanjut tentang penambahan interaktif di sini: http://nuclearsquid.com/writings/git-add/

labu
sumber
5

Jika Anda menggunakan GUI untuk Git, seperti SourceTree oleh Atlassian, atau git gui, Anda dapat melakukan sebagian file dan membiarkan bagian lain tidak dikomit. Bahkan, Anda dapat mengkomit setiap baris kode.

Saya sering melakukan ini ketika saya jatuh ke lubang kelinci seperti yang Anda jelaskan. Ini adalah cara yang bagus untuk membuat komit masuk akal atau komit sebagai pendahulu komit utama.

Anda dapat melakukan ini dari baris perintah, tetapi agak canggung.

Ketika Anda bisa mengkomit di tingkat patch Git dan garis individual, Anda tidak perlu membuat cabang baru, simpanan, komit, simpanan, dan gabungkan. Teruslah bekerja dan jangan hancurkan arusnya. Anda mendapatkan hal yang baik.

Greg Burghardt
sumber
@MasterMastic INI harus menjadi jawaban yang Anda terima. Mampu melakukan hanya satu baris kode saja adalah anugerah yang menakutkan.
JesseTG