Rumah > Soal Jawab > teks badan
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.
黄舟2017-06-16 09:21:00
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 A -> B -> C -> D
,你 git reset --hard
之后是 A -> B
。这时候除非远程那边抹掉 C
和 D
dan
A -> B
. Pada masa ini, melainkan bahagian jauh memadamkan C
dan D
, 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 arahan
A -> B -> C -> D
(Kandungan berikut adalah berdasarkan contoh di atas, alat kawalan jauh ialah
git revert
。其实,git reset --hard
和 git revert
git revert
telah disebut di tingkat atas. Malah, kedua-dua
git 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
dan D
, membentuk hasil seperti A -> 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 reflog
setempat.
漂亮男人2017-06-16 09:21:00
Secara umumnya, cuba elakkan situasi ini.
Jika anda mempunyai kebenaran kepada induk jauh, anda boleh melakukan ini:
git push --force
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