Saya memiliki sebuah proyek di mana aku berlari git init
.
Setelah beberapa komit, saya melakukan git status
yang mengatakan kepada saya semuanya up to date dan tidak ada perubahan lokal.
Kemudian saya membuat beberapa kali perubahan dan menyadari aku ingin membuang semuanya dan kembali ke keadaan semula. Akan perintah ini akan melakukannya untuk saya?
git reset --hard HEAD
Jika anda ingin mengembalikan perubahan yang dibuat ke copy pekerjaan anda, lakukan ini:
git checkout .
Jika anda ingin mengembalikan perubahan yang dibuat untuk indeks (yaitu, bahwa anda telah menambahkan), melakukan ini. Peringatan ini akan me-reset semua komit unpushed untuk menguasai!:
git reset
Jika anda ingin mengembalikan perubahan yang telah anda lakukan, lakukan ini:
git revert <commit 1> <commit 2>
Jika anda ingin menghapus terpantau file (misalnya, file baru, file yang dihasilkan):
git clean -f
Atau tidak terlacak direktori (misalnya, baru atau dihasilkan secara otomatis direktori):
git clean -fd
Catatan: Anda mungkin juga ingin menjalankan
git clean -fd
sebagai
git reset --hard
akan tidak hapus terpantau file, yang mana seperti git-bersih akan menghapus file dari dilacak direktori root yang tidak di bawah git pelacakan. PERINGATAN HATI - HATI DENGAN HAL INI! Hal ini membantu untuk menjalankan kering-lari dengan git-bersihkan terlebih dahulu, untuk melihat apa yang akan dihapus.
Ini juga sangat berguna ketika anda mendapatkan pesan error
~"performing this command will cause an un-tracked file to be overwritten"
Yang dapat terjadi ketika melakukan beberapa hal, salah satu yang menjadi memperbarui kerja copy ketika anda dan teman anda memiliki kedua menambahkan file baru dengan nama yang sama, tapi ia's berkomitmen ke kontrol sumber pertama, dan anda don't peduli tentang menghapus anda tidak terlacak copy.
Dalam situasi ini, melakukan dry run juga akan membantu menampilkan daftar file yang akan ditimpa.
GIT=$(git rev-parse --show-toplevel)
cd $GIT/..
rm -rf $GIT
git clone ...
.gitignore
(seperti membangun file).gitignore
Berikut adalah perintah lain saya lupa sehari-hari.
git clean --force -d -x
git reset --hard
.gitignore
(seperti membangun file).gitignore
git clean --force -d -x
.gitignore
(seperti membangun file).gitignore
git reset --hard
.gitignore
(seperti membangun file).gitignore
Kasus uji untuk mengkonfirmasikan semua di atas (menggunakan bash atau sh):
mkdir project
cd project
git init
echo '*.built' > .gitignore
echo 'CODE' > a.sourceCode
mkdir b
echo 'CODE' > b/b.sourceCode
cp -r b c
git add .
git commit -m 'Initial checkin'
echo 'NEW FEATURE' >> a.sourceCode
cp a.sourceCode a.built
rm -rf c
echo 'CODE' > 'd.sourceCode'
Lihat juga
git kembali
untuk membuat baru melakukan yang membatalkan sebelum melakukangit checkout
untuk kembali ke masa sebelum melakukan (mungkin memerlukan berjalan di atas perintah pertama)simpanan
sama seperti git reset
di atas, tetapi anda dapat membatalkannyaJika anda ingin mengembalikan semua perubahan DAN up-to-date dengan arus remote master (misalnya anda menemukan bahwa guru KEPALA telah bergerak maju karena anda bercabang dan mendorong anda sedang 'ditolak'), anda dapat menggunakan
git fetch # will fetch the latest changes on the remote
git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.
Melihat ke git-reflog. Ini akan menampilkan daftar semua negara bagian itu mengingat (default adalah 30 hari), dan anda hanya dapat checkout salah satu yang anda inginkan. Misalnya:
$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d
BAHAYA di DEPAN: (mohon baca komentar. Melaksanakan perintah yang diusulkan dalam jawaban saya mungkin akan menghapus lebih dari yang anda inginkan)
untuk benar-benar menghapus semua file termasuk direktori aku harus lari
git clean -f -d
Setelah membaca banyak jawaban dan mencoba mereka, aku've ditemukan berbagai kasus tepi yang berarti kadang-kadang mereka don't sepenuhnya bersih copy pekerjaan.
Berikut ini's saya saat ini bash script untuk melakukan hal itu, yang bekerja sepanjang waktu.
#!/bin/sh
git reset --hard
git clean -f -d
git checkout -- HEAD
Lari dari kerja copy direktori root.
Saya bertemu masalah yang sama.
Solusinya adalah dengan menggunakan git log
untuk melihat yang versi lokal melakukan ini berbeda dari remote. (E. g. versi lebih 3c74a11530697214cbcc4b7b98bf7a65952a34ec
).
Kemudian menggunakan git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec` untuk mengembalikan perubahan.
Saya mencari masalah serupa,
Ingin membuang lokal melakukan:
Begitu pula di bawah ini:
git reset --hard origin/dev
Check:
git status
On branch dev
Your branch is up-to-date with 'origin/dev'.
nothing to commit, working tree clean
sekarang setempat melakukan yang hilang, kembali ke awal kloning negara, point 1 di atas.
Anda mungkin tidak selalu ingin/perlu untuk menyimpan pekerjaan anda/file dalam direktori kerja anda tapi bukan hanya menyingkirkan mereka sepenuhnya. Perintah git bersih
akan melakukan ini untuk anda.
Beberapa kasus penggunaan umum untuk melakukan hal ini akan menghapus cruft yang telah dihasilkan oleh penggabungan, peleburan, atau alat-alat eksternal atau menghapus file-file yang lain sehingga anda dapat menjalankan membangun bersih.
Menjaga dalam pikiran anda akan ingin untuk menjadi sangat berhati-hati perintah ini, karena dirancang untuk memindahkan file dari direktori kerja yang TIDAK DILACAK. jika anda tiba-tiba berubah pikiran setelah mengeksekusi perintah ini, tidak ada akan kembali untuk melihat isi dari file yang telah dihapus. Alternatif yang lebih aman adalah untuk melaksanakan
`git stash --all`
yang akan menghapus segala sesuatu tetapi menyimpan semua itu dalam simpanan. Simpanan ini dapat kemudian digunakan.
Namun, jika anda benar-benar ingin menghapus semua file dan bersih direktori kerja anda, anda harus menjalankan
git bersih -f -d
Ini akan menghapus semua file dan sub-direktori yang don't memiliki barang-barang sebagai hasil dari perintah. Hal yang cerdas untuk dilakukan sebelum melaksanakan git bersih -f -d
perintah untuk menjalankan
git clean -f -d -n
yang akan menampilkan preview dari apa yang AKAN dihapus setelah melaksanakan git bersih -f -d
Jadi di sini adalah ringkasan dari pilihan anda dari yang paling agresif dan paling agresif
1: Menghapus semua file secara lokal(yang Paling agresif)
git clean -f -d
Pilihan 2: Preview atas dampak(Preview paling agresif)
git clean -f -d -n
3: Menyimpan semua file (Paling agresif)
git simpanan-semua
Coba ini untuk mengembalikan semua perubahan uncommited di cabang lokal
$ git reset --hard HEAD
Tetapi jika anda melihat kesalahan seperti ini:
fatal: Unable to create '/directory/for/your/project/.git/index.lock': File exists.
Anda dapat menavigasi ke '.git' folder kemudian menghapus indeks.mengunci file:
$ cd /directory/for/your/project/.git/
$ rm index.lock
Akhirnya, jalankan lagi perintah:
$ git reset --hard HEAD