Saat ini saya memiliki tiga file yang dimodifikasi di direktori kerja saya. Namun saya ingin salah satu dari mereka diatur ulang ke status HEAD.
Di SVN, saya akan menggunakan svn revert <filename>
(diikuti svn update <filename>
jika diperlukan) tetapi di Git saya harus menggunakan git reset --hard
. Namun perintah ini tidak dapat beroperasi pada satu file.
Apakah ada cara di Git untuk membuang perubahan pada satu file dan menimpanya dengan salinan KEPALA baru?
git checkout
di bawah ini jawabannya. Di git, "revert" adalah sesuatu yang Anda lakukan untuk komit. "Kembalikan" memutar balik kebalikan komit historis ke direktori kerja Anda, sehingga Anda dapat membuat komit baru yang "membatalkan" komit yang dikembalikan. Saya menemukan ini adalah titik sering kebingungan bagi orang-orang yang datang ke git dari svn.Jawaban:
Anda dapat menggunakan perintah berikut:
... yang akan memperbarui copy pekerjaan
my-file.txt
dan statusnya dalam indeks dengan yang dari HEAD.--
pada dasarnya berarti: perlakukan setiap argumen setelah titik ini sebagai nama file . Lebih detail dalam jawaban ini . Terima kasih kepada VonC untuk menunjukkan ini.sumber
HEAD~1
untuk menunjukkan komit kedua dari belakang.HEAD
jika Anda berada di kepala cabang saat ini - lihat norbauer.com/rails-consulting/notes/…reset
perintah (seperti yang tertulis) "tidak dapat melakukan hard reset dengan paths", dan kemudian mengapacheckout
perintah tersebut tidak (tidak bisa?) Digunakan untuk mengatur ulang seluruh set dengan susah payah? (Maksud saya mengapa itu dirancang demikian.)git checkout
: "Timpa jalur di pohon yang berfungsi dengan mengganti dengan isi dalam indeks atau di <tree-ish>". Yaitu jika<tree-ish>
dihilangkan, konten apa pun dalam indeks akan digunakan untuk memperbarui pohon kerja. Ini mungkin atau mungkin tidak berbeda dari KEPALA.Setel ulang ke kepala:
Untuk mengatur ulang satu file ke HEAD:
Perhatikan bahwa
@
kependekan dariHEAD
. Versi git yang lebih lama mungkin tidak mendukung formulir singkat.Setel ulang ke indeks:
Untuk mengatur ulang satu file ke indeks , dengan asumsi indeks tidak kosong, jika tidak maka KEPALA:
Intinya adalah agar aman, Anda tidak ingin meninggalkan
@
atauHEAD
dari perintah kecuali Anda secara khusus bermaksud mengatur ulang ke indeks saja.sumber
man bash
halaman. Juga disebutkan dalam jawaban ini: unix.stackexchange.com/a/187548/142855--
ini digunakan untuk memberi tahu programI've finished specifying "options", and from here on, everything will be a positional argument.
. Secara konvensional, "opsi" adalah token seperti--recursive
yang dapat muncul dalam urutan apa pun, atau bahkan digabungkan bersama dalam bentuk singkatnya, seperti denganrm -rf
. Sebaliknya, "argumen posisional" jauh lebih mirip dengan argumen yang dilewatkan ke fungsi dalam bahasa pemrograman: posisi mereka dalam daftar token menentukan apa yang sebenarnya akan dilakukan program dengan mereka (ini sering nama file).--
menghilangkan ambiguitas tentang yang mana.Untuk kembali ke hulu / master lakukan:
sumber
Sejak Git 2.23 (Agustus 2019) Anda dapat menggunakan
restore
( info lebih lanjut ):Di atas akan mengembalikan
MyFile
padaHEAD
(komit terakhir) pada cabang saat ini.Jika Anda ingin mendapatkan perubahan dari komit lain, Anda bisa mundur pada komit sejarah. Perintah di bawah ini akan mendapatkan
MyFile
dua komit sebelum yang terakhir. Anda sekarang memerlukan opsi-s
(--source
) karena sekarang Anda menggunakanmaster~2
dan bukanmaster
(default) saat Anda memulihkan sumber:Anda juga bisa mendapatkan file dari cabang lain!
sumber
Referensi ke KEPALA tidak perlu.
git checkout -- file.js
Cukupsumber
Anda dapat menggunakan perintah di bawah ini untuk mengatur ulang satu file
Daftar semua file yang diubah untuk mendapatkan
path_to_file/filename
dengan perintah di bawah inisumber
Anda dapat menggunakan perintah berikut:
git reset -- my-file.txt
yang akan memperbarui copy pekerjaan
my-file.txt
saat ditambahkan.sumber
Anda dapat menggunakan perintah berikut:
Jika Anda memiliki cabang dengan nama file yang sama Anda harus menggunakan perintah ini:
sumber
Cara sederhana, mudah, langsung, untuk mengeluarkan Anda dari air panas, terutama jika Anda tidak begitu nyaman dengan git:
Lihat log file Anda
git login myFile.js
commit 1023057173029091u23f01w276931f7f42595f84f Penulis: kmiklas Tanggal: Sel 7 Agu 09:29:34 2018 -0400
JIRA-12345 - Refactor dengan arsitektur baru.
Catatan hash file:
1023057173029091u23f01w276931f7f42595f84f
Tampilkan file menggunakan hash. Pastikan itu yang Anda inginkan:
git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js
Redirect file ke salinan lokal
git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js> myFile.07aug2018.js
Cadangkan file Anda saat ini.
cp myFile.js myFile.bak.js
Buka kedua file di editor teks favorit Anda.
vim myFile.js
vim myFile.07aug2018.js
Salin dan tempel kode dari myFile.07aug2018.js ke myFile.js, dan simpan.
Komit dan tekan myFile.js
Sekali lagi lihat log, dan konfirmasikan bahwa file Anda sudah terpasang dengan benar.
Beri tahu klien Anda untuk menarik yang terbaru, senang melihatnya bekerja dengan versi lama di tempat.
Bukan solusi terseksi, atau sebagian besar git-centric, dan pasti reset / pembalikan "manual", tetapi ia bekerja. Membutuhkan pengetahuan minimal tentang git, dan tidak mengganggu riwayat commit.
sumber