Mungkin apa yang saya katakan tidak begitu jelas, tetapi semasa saya menulis kod itu, saya mendapati bahawa saya tidak lagi mahu melakukannya, jadi saya menggunakan git reset --hard <版本号>
untuk kembali ke versi sebelumnya dan menulisnya semula, supaya apabila saya selesai menulis, saya ingin menyerahkannya ke Gudang jauh, ia akan melaporkan ralat
To https://github.com/zifenggao/wenda.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/zifenggao/wenda.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Ia mengatakan bahawa versi saya adalah yang sebelumnya dan saya harus menggabungkannya dan kemudian menyerahkannya. Apa yang perlu saya lakukan beberapa kali tetapi masih tidak memahaminya.
Pertama sekali, mengikut penerangan anda, kerana anda telah menggunakan
git reset --hard
,那就可以推断出你已经add
和commit
过了。其次,根据报错,可以推断出你已经
push
(inferens ini berdasarkan fakta bahawa hanya anda yang mempunyai kebenaran menukar cawangan induk.Kemudian apabila anda melaksanakan
git reset --hard
, rekod sejarah tidak boleh digabungkan terus dengan rekod jauh. Itulah sebabnya terdapat ralat ini.Sebagai contoh, alat kawalan jauh ialah
anda diikuti denganA -> B -> C -> D
,你git reset --hard
之后是A -> B
。这时候除非远程那边抹掉C
和D
danA -> B
. Pada masa ini, melainkan bahagian jauh memadamkanC
danD
, ia tidak boleh digabungkan.git push origin master --force
Oleh itu, pada masa ini, anda harus menggunakan untuk menimpa rekod jauh secara paksa.git pull
。否则,你的本地又会变成A -> B -> C -> D
。因为git pull
相当于git fetch
+git merge
Sila jangan gunakan mengikut arahanA -> B -> C -> D
(Kandungan berikut adalah berdasarkan contoh di atas, alat kawalan jauh ialahgit revert
。其实,git reset --hard
和git revert
git revert
telah disebut di tingkat atas. Malah, kedua-duagit revert
boleh mencapai "kod balik". Tetapi perbezaannya ialah:git revert
会把你的本地变成A -> B -> C -> D -> E
。其中,E
干的事儿是删除C
和D
。这样做的好处在于,你git push origin master
就不会有上面的报错了。但,历史线上还是会保留C
和D
这两个 commit。如果使用这个命令,记得要add
然后commit
git reset --hard
会直接删掉C
和D
,形成A -> B
这样的结果。好处在于更直接更彻底。缺点在于,首先要通过git push origin master --force
去强行更改。其次,一旦你后悔了,除非根据本地的reflog
C
danD
, membentuk hasil sepertiA -> B
. Kelebihannya ialah ia lebih langsung dan teliti. Kelemahannya ialah anda mesti terlebih dahulu memaksa perubahan melalui. Kedua, sebaik sahaja anda menyesalinya, tiada cara lain melainkan anda memulihkan terus penunjuk HEAD mengikut
Tidak kira yang mana satu yang anda gunakan, sila pilih mengikut keperluan anda. 🎜🎜reflog
setempat.Secara umumnya, cuba elakkan situasi ini.
Jika anda mempunyai kebenaran kepada induk jauh, anda boleh melakukan ini:
Pendekatan yang lebih munasabah ialah menggunakan git revert
Edit garis pemisah
Seorang pelajar lain @S1ngS1ng memberikan jawapan yang lebih terperinci, tetapi dia membangkitkan bahawa mana-mana satu boleh digunakan Saya masih perlu menegaskan bahawa git revert adalah pendekatan yang lebih sesuai
Apabila ia adalah senario pembangunan berbilang orang, kemungkinan besar kod terbaharu telah ditarik oleh orang lain pada induk jauh atau digabungkan ke dalam cawangan lain Dalam kes ini, tetapan semula akan menjadi tidak sah, kerana pihak lain mungkin masih menolak ia kepada anda dan mahu memadamkannya
Jadi idea bahawa anda boleh menggunakan mana-mana satu daripadanya sebenarnya mempunyai had