Batalkan copy pekerjaan dari satu file di git?

Setelah komit terakhir, saya mengubah banyak file dalam copy pekerjaan saya, tetapi saya ingin membuang perubahan di salah satu file ini, seperti yang diatur u>

Namun, saya hanya ingin membatalkan perubahan dalam copy pekerjaan hanya dari satu file, tidak lebih dari itu.

Bagaimana cara melakukannya?

1386
28 марта '09 в 8:09 2009-03-28 08:09 hasen diatur pada 28 Maret '09 pada 8:09 2009-03-28 08:09
@ 14 jawaban

Anda bisa menggunakannya

 git checkout -- file 

Anda dapat melakukannya tanpa -- (seperti yang disarankan oleh nimrodm), tetapi jika nama file terlihat seperti cabang atau tag (atau pengenal revisi lainnya), ini dapat membingungkan, jadi lebih baik digunakan -- .

Anda juga dapat memeriksa versi spesifik file:

 git checkout v1.2.3 -- file # tag v1.2.3 git checkout stable -- file # stable branch git checkout origin/master -- file # upstream master git checkout HEAD -- file # the version from the most recent commit git checkout HEAD^ -- file # the version before the most recent commit 
1917
28 марта '09 в 9:12 2009-03-28 09:12 membalas Brian Campbell pada 28 Maret 2009 pada 9:12 2009-03-28 09:12
 git checkout <commit> <filename> 

Saya menggunakannya hari ini karena saya menyadari bahwa ikon saya ditimpa oleh beberapa commit saat saya meningkatkan ke drupal 6.10, jadi saya harus mengembalikannya. Inilah yang saya lakukan:

 git checkout 088ecd favicon.ico 
120
28 марта '09 в 13:25 2009-03-28 13:25 jawabannya diberikan neoneye 28 Maret 2009 di 13:25 2009-03-28 13:25

Gunakan saja

 git checkout filename 

Ini akan mengganti nama file dengan versi terbaru dari cabang saat ini.

PERINGATAN: perubahan Anda akan dibuang - cadangan tidak disimpan.

108
28 марта '09 в 8:55 2009-03-28 08:55 jawabannya diberikan nimrodm 28 Maret 2009 di 08:55 2009-03-28 08:55

Jika file Anda sudah diinstal (terjadi ketika Anda melakukan git add, dll. Setelah mengedit file) untuk menonaktifkan perubahan.

Gunakan

 git reset HEAD <file> 

Lalu

 git checkout <file> 

Jika Anda belum mengirim, gunakan saja

 git checkout <file> 
57
03 июля '12 в 8:46 2012-07-03 08:46 jawabannya diberikan thanikkal 03 Juli '12 pada 8:46 2012-07-03 08:46

Jika Anda hanya ingin membatalkan perubahan sebelumnya pada komit file ini, Anda dapat mencoba yang berikut:

 git checkout branchname^ filename 

Ini akan memeriksa file dengan cara yang sama seperti sebelum komit terakhir. Jika Anda ingin mundur sedikit lagi, gunakan notasi branchname~n .

15
28 марта '09 в 8:25 2009-03-28 08:25 balasan yang diberikan oleh sykora pada 28 Maret 2009 pada 08:25 2009-03-28 08:25

Saya berhasil melewati git bash:

(use "git checkout -- <file>..." to discard changes in working directory)

  1. Status git. [Jadi, kami melihat satu file dimodifikasi.]
  2. git checkout - index.html [Saya mengubah file index.html:
  3. status git [perubahan ini sekarang telah dihapus]

2019

10 апр. Jawabannya diberikan oleh Shivanandam Sirmarigari pada 10 Apr. 2018-04-10 17:54 '18 jam 5:54 malam 2018-04-10 17:54

Saya selalu bingung dengan ini, jadi inilah contoh memeriksa pengingat; katakanlah kita memiliki skrip bash untuk menguji git :

 set -x rm -rf test mkdir test cd test git init git config user.name test git config user.email test@test.com echo 1 > a.txt echo 1 > b.txt git add * git commit -m "initial commit" echo 2 >> b.txt git add b.txt git commit -m "second commit" echo 3 >> b.txt 

Pada titik ini, perubahan tidak dilakukan dalam cache, jadi git status :

 $ git status On branch master 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 no changes added to commit (use "git add" and/or "git commit -a") 

Jika dari titik ini kami melakukan git checkout , hasilnya adalah sebagai berikut:

 $ git checkout HEAD -- b.txt $ git status On branch master nothing to commit, working directory clean 

Jika sebaliknya kita melakukan git reset , hasilnya adalah:

 $ git reset HEAD -- b.txt Unstaged changes after reset: M b.txt $ git status On branch master 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 no changes added to commit (use "git add" and/or "git commit -a") 

Jadi, dalam hal ini - jika perubahan tidak diatur, git reset tidak masalah, dan git checkout menimpa perubahan.


Sekarang katakanlah bahwa perubahan terakhir dari skrip di atas dikirimkan / di-cache, yaitu, kami juga membuat git add b.txt di akhir.

Dalam hal ini, git status pada titik ini:

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

Jika dari titik ini kami melakukan git checkout , hasilnya adalah sebagai berikut:

 $ git checkout HEAD -- b.txt $ git status On branch master nothing to commit, working directory clean 

Jika sebaliknya kita melakukan git reset , hasilnya adalah:

 $ git reset HEAD -- b.txt Unstaged changes after reset: M b.txt $ git status On branch master 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 no changes added to commit (use "git add" and/or "git commit -a") 

Jadi, dalam hal ini - jika perubahan dikirimkan, git reset pada dasarnya akan membuat perubahan tambahan untuk perubahan yang tidak ditentukan, dan git checkout sepenuhnya menimpa perubahan tersebut.

7
09 февр. jawabannya diberikan sdaau 09 Feb. 2016-02-09 11:56 '16 pada 11:56 2016-02-09 11:56

Saya mengembalikan file saya dengan SHA-id, yang saya lakukan git checkout <sha hash id> <file name>

5
22 мая '12 в 23:39 2012-05-22 23:39 Jawabannya diberikan Beto 22 Mei '12 pada 23:39 2012-05-22 23:39

Tanggapan ini adalah untuk perintah yang diperlukan untuk membatalkan perubahan lokal yang ada di beberapa file tertentu dalam satu atau lebih folder (atau direktori). Jawaban ini, khususnya, menjawab pertanyaan di mana pengguna memiliki lebih dari satu file, tetapi ia tidak ingin membatalkan semua perubahan lokal:

jika Anda memiliki satu file atau lebih, Anda dapat menerapkan perintah yang sama ( git checkout -- file ) untuk masing-masing file ini, mendaftar setiap lokasi mereka, dipisahkan oleh spasi, seperti pada:

 git checkout -- name1/name2/fileOne.ext nameA/subFolder/fileTwo.ext 

perhatikan ruang di atas antara name1 / name2 / fileOne.ext nameA / subFolder / fileTwo.ext

Untuk beberapa file dalam folder yang sama:

Jika Anda perlu membuang perubahan untuk semua file dalam direktori tertentu, gunakan checkout git sebagai berikut:

 git checkout -- name1/name2/* 

Tanda bintang yang ditunjukkan di atas melakukan prosedur untuk menghapus semua file di lokasi ini bernama name / name2.

Dan, demikian pula, berikut ini dapat membatalkan perubahan di semua file untuk beberapa folder:

 git checkout -- name1/name2/* nameA/subFolder/* 

perhatikan lagi spasi antara name1 / name2 / * nameA / subFolder / * di atas.

Catatan: name1, name2, nameA, subFolder - semua contoh nama folder ini menunjukkan folder atau paket tempat file yang dimaksud dapat ditemukan.

4
24 янв. Jawabannya diberikan Nirmal 24 Jan 2017-01-24 00:26 '17 pada 0:26 2017-01-24 00:26

Jika Anda belum mengklik atau membagikan pesan Anda:

 git diff --stat HEAD^...HEAD | \ fgrep filename_snippet_to_revert | cut -d' ' -f2 | xargs git checkout HEAD^ -- git commit -a --amend 
2
30 апр. Jawabannya diberikan oleh Jesse Glick pada 30 April 2014-04-30 22:45 '14 jam 10:45 2014-04-30 22:45

Bagi saya, hanya yang ini yang berfungsi

 git checkout -p filename 

2019

19 авг. jawabannya diberikan Ramesh Bhupathi 19 Agustus. 2017-08-19 17:28 '17 pukul 5:28 sore 2017-08-19 17:28

Jika sudah dikomit, Anda bisa membatalkan perubahan untuk file dan mengkomitnya lagi, lalu remas komit baru dengan komit terakhir.

0
26 апр. balasan yang diberikan oleh Gina pada 26 Apr. 2017-04-26 22:17 '17 pada 10:17 malam 2017-04-26 22:17

Saya tidak tahu mengapa, tetapi ketika saya mencoba memasukkan kode saya, itu terlihat seperti gambar.

2019

31 дек. jawabannya diberikan Gene 31 Desember. 2018-12-31 18:55 19 di 18:55 2018-12-31 18:55

Untuk kasus khusus saat Anda

  • gunakan gerrit (atau set lain) untuk melihat kode

  • sudah melakukan perubahan

  • sudah dikirim untuk ditinjau

  • ingin membatalkan perubahan hanya di file tertentu.

  • Tidak ingin mengatur u>

Saya menemukan urutan berikut, yang akan menjadi yang paling nyaman:

  • Dapatkan perubahan yang ditetapkan untuk file git tertentu yang menunjukkan HEAD [targe_file_name]> path / file.patch

  • Buang perubahan yang dilakukan pada git tertentu terapkan file -R path / file.patch

  • Komit dan tinjau git add -u git komit - ubah ulasan git

-1
24 окт. jawaban yang diberikan oleh Zhenhua pada 24 Oktober 2017-10-24 04:18 '17 pada 4:18 2017-10-24 04:18

Pertanyaan lain tentang atau Ajukan Pertanyaan