Urungkan git mv (ganti nama)

142

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

git mv file1 file2
jrdioko
sumber
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

CanSpice
sumber
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
Klas Mellbourn
sumber
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

zbig
sumber
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
zedd45
sumber
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.

William Pursell
sumber
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.

Dave Konopka
sumber
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.

Kamaraju Kusumanchi
sumber
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.

sevencontinents
sumber
0

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

git reset
git checkout.

w0mbat.dll
sumber