Apakah ada cara untuk mengembalikan atau membatalkan git pull sehingga sumber / repo saya akan kembali ke kondisi lama yang sebelumnya melakukan git pull? Saya ingin melakukan ini karena menggabungkan beberapa file yang saya tidak ingin melakukannya, tetapi hanya menggabungkan file yang tersisa lainnya. Jadi, saya ingin mendapatkan file-file itu kembali, apakah itu mungkin?
EDIT: Saya ingin membatalkan git untuk klarifikasi. Setelah melihat beberapa jawaban, saya melakukan ini
git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...
Sekarang, apa yang harus saya lakukan? Apakah baik git reset --hard
-baik saja? Saya tidak ingin mengacaukannya lagi, jadi minta langkah rinci?
git
version-control
git-merge
seg.server.fault
sumber
sumber
git reset --hard 01b34fa
dalam hal ini Anda bisa melakukangit reset --hard HEAD^
yang diatur ulang ke satu komit sebelum KEPALA.git reflog
akan menunjukkan semua yang telah dilakukan dengan git. Ada kekhawatiran yanggit reset --hard [sha1 of something from reflog]
akan mengembalikan semua yang ditampilkanreflog
, yang terkadang bukan tujuan, misalnya. Anda ingin mengembalikan penggabungan pada cabang master yang ditarik dari asal dengan data buruk (terjadi), dan setelah penggabungan tersebut Anda telah bekerja pada cabang lainnya.reflog
akan menunjukkan setiap chage di cabang lain. Tapigit checkout master
dangit reset --hard [SH1 of commit on master branch just before merge]
akan mengatur ulang hanya cabang master saat ini menghapus gabungan yang ditarik dari asal.Jawaban:
Menjalankan
git pull
melakukan tugas-tugas berikut, dalam rangka:git fetch
git merge
Langkah menggabungkan menggabungkan cabang yang telah disetel untuk digabungkan dalam konfigurasi Anda. Anda ingin membatalkan langkah penggabungan , tetapi mungkin tidak mengambilnya (tidak masuk akal dan tidak perlu).
Untuk membatalkan penggabungan , gunakan
git reset --hard
untuk mengatur ulang repositori lokal ke status sebelumnya; gunakan git-reflog untuk menemukan SHA-1 dari kondisi sebelumnya dan kemudian mengatur ulang.Peringatan
Perintah yang tercantum di bagian ini menghapus semua perubahan yang tidak dikomit, berpotensi menyebabkan hilangnya pekerjaan:
Atau, reset ke titik waktu tertentu, seperti:
sumber
master@{1}
, yang merupakan posisi sebelumnyamaster
,master@{"5 minutes ago"}
ataumaster@{14:30}
. Rincian lengkap tentang menentukan revisi dengan cara ini dapat ditemukan diman git-rev-parse
, di bagian yang disebut "menentukan revisi".Updating d2c90a3..035ac4d
. Di sini, Anda juga dapat menggunakand2c90a3
sebagai parameter untuk mengatur ulang.Sama seperti jawaban jkp, tapi inilah perintah lengkapnya:
di mana a0d3fe6 ditemukan dengan melakukan
dan melihat titik di mana Anda ingin membatalkannya.
sumber
git reset HEAD --hard
, misalnya?git reset --hard HEAD@{n}
bekerjagit reflog
: dab04ec HEAD @ {0}, aaaaaaa HEAD @ {1} dan bbbbbbb HEAD @ {2}. Jika saya melakukannya,git reset --hard bbbbbbb
saya akan kehilangan KEPALA 0 dan 1?Cara yang lebih modern untuk membatalkan penggabungan adalah:
Dan cara yang sedikit lebih tua:
Cara sekolah lama yang dijelaskan dalam jawaban sebelumnya (peringatan: akan membuang semua perubahan lokal Anda):
Namun sebenarnya, perlu diperhatikan bahwa
git merge --abort
hanya setara dengan yanggit reset --merge
diberikan yangMERGE_HEAD
hadir. Ini bisa dibaca di git help untuk menggabungkan perintah.Setelah penggabungan yang gagal, ketika tidak ada
MERGE_HEAD
, penggabungan yang gagal dapat dibatalkan dengangit reset --merge
tetapi tidak harus dengangit merge --abort
, sehingga mereka tidak hanya sintaks lama dan baru untuk hal yang sama . Inilah mengapa saya merasagit reset --merge
jauh lebih berguna dalam pekerjaan sehari-hari.sumber
git merge --abort
bekerja selama penggabungan, bukan setelahgit pull
selesai. Jadi jawaban ini tampaknya tidak relevan dengan pertanyaan itu.git reset --merge
menghapus semua perubahan yang tidak dilakukan untuk melakukan. Menemukan ini dengan cara yang sulit.ini berfungsi pertama kali digunakan:
git reflog
temukan SHA Anda dari status previus Anda dan buat (HEAD @ {1} sebagai contoh)
sumber
Jika Anda memiliki gitk (coba jalankan "gitk --all dari git command line"), itu sederhana. Jalankan saja, pilih komit yang ingin Anda kembalikan (klik kanan), dan pilih "Reset master branch to here". Jika Anda tidak memiliki perubahan yang tidak dikomit, pilih opsi "keras".
sumber
Misalkan
$COMMIT
adalah id komit terakhir sebelum Anda tampilgit pull
. Yang Anda butuhkan untuk membatalkan tarikan terakhir adalahgit reset --hard $COMMIT
.
Bonus:
Berbicara tentang tarik, saya ingin berbagi trik yang menarik,
git pull --rebase
Perintah di atas adalah perintah yang paling berguna dalam hidup git saya yang menghemat banyak waktu.
Sebelum mendorong komit Anda yang baru ke server, coba perintah ini dan itu akan secara otomatis menyinkronkan perubahan server terbaru (dengan mengambil + gabungan) dan akan menempatkan komit Anda di bagian atas dalam log git. Tidak perlu khawatir tentang tarikan / penggabungan manual.
Temukan detailnya di: http://gitolite.com/git-pull--rebase
sumber
Ini adalah cara termudah untuk mengembalikan perubahan yang Anda tarik.
Harap buat cadangan file yang diubah karena akan menghapus file dan folder yang baru dibuat .
Di mana
9573e3e0
{id Komit} Andasumber
Updating ffce65bd..e929e884
, dogit reset --hard ffce65bd
Anda dapat melakukan
git reset --hard ORIG_HEAD
sejak "menarik" atau "menggabungkan" set ORIG_HEAD menjadi kondisi saat ini sebelum melakukan tindakan tersebut.
sumber
git pull lakukan di bawah operasi.
Untuk membatalkan tarik lakukan operasi apa pun:
Perbaikan:
Lain kali gunakan
git pull --rebase
alih-alihgit pull
.. sinkronisasi servernya dengan melakukan (ambil & gabungkan).sumber
Jika ada gabungan gagal, yang merupakan alasan paling umum untuk ingin membatalkan
git pull
, menjalankangit reset --merge
melakukan persis apa yang diharapkan: simpan file yang diambil, tetapi batalkan gabungan yanggit pull
berusaha untuk menggabungkan. Maka orang dapat memutuskan apa yang harus dilakukan tanpa kekacauan yanggit merge
kadang - kadang menghasilkan. Dan tidak perlu satu untuk menemukan ID komit yang tepat yang--hard
disebutkan dalam setiap jawaban lainnya membutuhkan.sumber