Urungkan git mv (ganti nama)


142

Apa cara yang benar untuk membatalkan penggantian nama di git, seperti:

git mv file1 file2

21
Jawaban git mv file2 file1
nakal

@CanSpice: Itu adalah jawaban yang benar; tidak ada yang nakal tentang itu.
CB Bailey

1
@ Charles: Baiklah, saya telah memberikannya sebagai jawaban tidak nakal yang tepat. :-)
CanSpice

git mv file2 file1 Anda mengharapkan yang lain?
Lakshman Prasad

Jawaban:


235

Jawaban tidak nakal:

git mv file2 file1

Memperbarui indeks untuk jalur lama dan baru secara otomatis.

Periksa dokumentasi git mv


4
misalkan file1 dan file2 keduanya ada di direktori saat ini (.), lalu mengapa git checkout .tidak berfungsi, bahkan dengan -fopsi?
ryenus

10
Tampaknya jarang hal-hal seintuitif ini :)
ragerdl

@ryenus Anda perlu menggunakan git checkout -- ..
Joseph238

Lol. Itu menyenangkan.
Dmitriy Dokshin

Tidak berhasil untuk saya memberikan kesalahan:, fatal: source directory is empty,hanya git reset --hardmelakukan pekerjaan itu.
mac13k

44

Jika Anda tidak melakukan perubahan lain (yang ingin Anda pertahankan) sejak komit terakhir, Anda bisa melakukannya

git reset --hard

6
Saya tidak ingin membiasakan diri menggunakan git reset --hard. Memindahkannya ke belakang sepertinya merupakan pilihan yang lebih aman bagi saya.
Sergey Orshanskiy

4
Bekerja untuk saya. Saya ingin membatalkan "git mv" yang 1) belum dilakukan, dan 2) saya tidak memiliki chages lain
Ed of the Mountain

Jika Anda memiliki perubahan lain yang ingin Anda pertahankan, ini akan menghancurkan semuanya.
pengguna151841

13
git reset HEAD file2

melakukan trik untuk saya


1
Satu-satunya masalah yang saya miliki dengan jawaban ini adalah ia meninggalkan salinan untuk file2 di disk.
pengguna52472

9

Dalam kasus saya, saya memindahkan seluruh folder, lalu menyadari bahwa saya seharusnya tidak melakukannya.

Saya sangat menyukai jawaban @Dave Konopka, tetapi saya tidak terlalu berhasil dengan pendekatan itu (mungkin versi GIT saya (1.8.4)? File saya masih ditampilkan sebagai dihapus. Saya memiliki perubahan lain pada tumpukan yang tidak saya inginkan kalah (sayangnya).

Saya berhasil melakukan ini:

git reset moved_folder
git checkout original_folder

8

Itu tergantung pada apa yang ingin Anda capai. Jika Anda ingin tampak seolah-olah file tersebut tidak pernah dipindahkan, maka Anda dapat mengatur ulang (atau melakukan rebase) kembali ke sebelum pindah. Jika Anda tidak peduli dengan sejarahnya, maka pindahkan kembali.


4
Yang pertama berfungsi dengan baik selama Anda tidak memaksakan komitmen Anda, atau seseorang belum menarik diri dari Anda.
CanSpice

7

Jika Anda secara tidak sengaja mengganti nama sejumlah besar file dan ingin kembali ke awal, hapus semua file yang diganti namanya yang muncul sebagai di addsbawah git statuspanggilan.

Setelah Anda menghapus semua file yang diubah, Anda dapat menjalankan git checkout -- *untuk mendapatkan kembali nama file asli secara lokal.


4
git reset HEAD file2
git checkout -- file1
rm file2

Perintah pertama menghapus file2 tetapi meninggalkan salinannya. Perintah kedua memulihkan file asli dan yang ketiga menghapus file baru.


1

Trik yang saya gunakan adalah melakukan git simpanan untuk membatalkan semua perubahan saya (termasuk memulihkan file mv'd) dan kemudian menghapus simpanan dengan git stash drop.


0

Yang kurang menakutkan adalah pergi ke tingkat atas repo dan lakukan:

git reset
git checkout.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.