Saya sedang mengerjakan cabang git dan siap untuk melakukan perubahan saya, jadi saya membuat komitmen dengan pesan komit yang bermanfaat. Saya kemudian dengan linglung membuat perubahan kecil pada kode yang tidak layak disimpan. Saya sekarang ingin mengganti cabang, tapi git memberi saya,
kesalahan: Anda memiliki perubahan lokal ke "X"; tidak bisa berganti cabang.
Bisakah saya mengganti cabang tanpa melakukan komitmen? Jika demikian, bagaimana saya bisa mengatur ini? Jika tidak, bagaimana cara saya keluar dari masalah ini? Saya ingin mengabaikan perubahan kecil tanpa melakukan dan hanya mengubah cabang.
git
branch
git-checkout
Daniel Farrell
sumber
sumber
error: You have local changes to '<filename>'; cannot switch branches.
dan cabang tidak akan berubah. Anda bisa melakukannyagit checkout -m <branch-name>
untuk menggabungkan konflik dan checkout ke cabang dan menyelesaikan konflik sendiri, ataugit checkout -f <branch-name>
mengabaikan perubahan.Jawaban:
Anda perlu kondisi bersih untuk mengubah cabang. Checkout cabang hanya akan diizinkan jika tidak mempengaruhi 'file kotor' (seperti komentar Charles Bailey dalam komentar).
Jika tidak, Anda harus:
reset --hard HEAD
(jika Anda tidak keberatan kehilangan perubahan kecil itu) ataucheckout -f
(Saat berganti cabang, lanjutkan bahkan jika indeks atau pohon kerja berbeda dari HEAD. Ini digunakan untuk membuang perubahan lokal.)Atau, baru-baru ini:
git switch
:git switch -f <branch-name>
(
-f
kependekan dari--force
, yang merupakan alias untuk--discard-changes
)Ini berbeda dari
git switch -m <branch-name>
, yang memicu gabungan tiga arah antara cabang saat ini, konten pohon kerja Anda, dan cabang baru selesai: Anda tidak akan kehilangan pekerjaan Anda yang sedang berlangsung dengan cara itu.sumber
Jika Anda ingin membuang perubahan,
Jika Anda ingin menyimpan perubahan,
sumber
git stash save
(ketika bekerja di cabang Y) kemudiangit checkout branchX
lakukan sesuatugit add/commit -m
dllgit checkout branchY
dangit stash pop
untuk mendapatkan kembali simpanangit stash save
sekarang sudah usang dalam mendukunggit stash push
baik, seharusnya
sumber
git stash
akan default kegit stash save
Mengikuti,
sumber
Perhatikan bahwa jika Anda telah menggabungkan cabang jarak jauh atau memiliki komit lokal dan ingin kembali ke HEAD jarak jauh, Anda harus melakukan:
HEAD
sendiri hanya akan merujuk ke komit / penggabungan lokal - beberapa kali saya lupa bahwa ketika mengatur ulang dan berakhir dengan "repositori Anda adalah X berkomitmen di depan .." ketika saya sepenuhnya bermaksud untuk mem-nuke SEMUA perubahan / komitmen dan kembali ke cabang jarak jauh .sumber
Jika Anda telah membuat perubahan pada file yang juga perlu diubah Git saat berpindah cabang, itu tidak akan membiarkan Anda. Untuk membuang perubahan yang berfungsi, gunakan:
Kemudian, Anda akan dapat berganti cabang.
sumber
Tidak satu pun dari jawaban ini yang membantu saya karena saya masih memiliki file yang tidak terlacak bahkan setelah diatur ulang dan disimpan. Saya harus melakukan:
sumber
beralih ke cabang baru kehilangan perubahan:
beralih ke cabang yang ada kehilangan perubahan:
sumber
Jawaban mudah:
adalah memaksa checkout cabang
Memaksa memeriksa cabang memberitahu git untuk membatalkan semua perubahan yang Anda buat di cabang saat ini, dan memeriksa yang diinginkan.
atau jika Anda memeriksa komit
Jawabannya adalah Tidak , itu benar-benar filosofi Git bahwa Anda melacak semua perubahan, dan bahwa setiap node (yaitu komit) harus diperbarui dengan perubahan terbaru yang Anda buat, kecuali Anda sudah membuat komitmen baru tentu saja.
Anda memutuskan untuk menyimpan perubahan?
Kemudian simpanan mereka gunakan
dan kemudian untuk melepaskan perubahan Anda di cabang yang diinginkan, gunakan
yang akan menerapkan Anda perubahan tetapi tetap di antrian simpanan juga. Jika Anda tidak ingin menyimpannya di tumpukan simpanan, maka letakan menggunakan
Itu setara dengan
apply
dan kemudiandrop
sumber
Tutup terminal, hapus folder di mana proyek Anda berada, lalu tiru lagi proyek dan voilá Anda.
sumber
reset --hard
!Jika Anda ingin menyimpan perubahan dan mengubah cabang dalam satu perintah baris
sumber
Pindahkan perubahan yang tidak dikomit ke cabang baru
Saya membuat
.gitconfig
alias untuk ini:Untuk mengubahnya
new-branch-name
, gunakan:Dan perubahan file dan indeks yang tidak berkomitmen akan disimpan.
sumber
git checkout -f your_branch_name
jika Anda memiliki masalah dalam mengembalikan perubahan:
jika Anda ingin menghapus direktori dan file yang tidak dilacak:
sumber
Untuk beralih ke cabang lain tanpa melakukan perubahan ketika git simpanan tidak berfungsi. Anda dapat menggunakan perintah di bawah ini:
git checkout -f cabang-nama
sumber