cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menyerahkan versi lama kod yang digulung semula dan fail yang diubah ke cawangan utama di github

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.

巴扎黑巴扎黑2711 hari yang lalu1181

membalas semua(2)saya akan balas

  • 黄舟

    黄舟2017-06-16 09:21:00

    Pertama sekali, mengikut penerangan anda, kerana anda telah menggunakan git reset --hard,那就可以推断出你已经 addcommit 过了。
    其次,根据报错,可以推断出你已经 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。这时候除非远程那边抹掉 CD dan

    anda diikuti dengan A -> B. Pada masa ini, melainkan bahagian jauh memadamkan C dan D, ia tidak boleh digabungkan.

    git push origin master --forceOleh itu, pada masa ini, anda harus menggunakan untuk menimpa rekod jauh secara paksa.

    git pull。否则,你的本地又会变成 A -> B -> C -> D。因为 git pull 相当于 git fetch + git mergeSila jangan gunakan mengikut arahan


    A -> B -> C -> D (Kandungan berikut adalah berdasarkan contoh di atas, alat kawalan jauh ialah

    , dan anda mahu kembali ke keadaan B)

    git revert。其实,git reset --hardgit revertgit revert telah disebut di tingkat atas. Malah, kedua-dua

    dan git revert boleh mencapai "kod balik". Tetapi perbezaannya ialah:

    git revert 会把你的本地变成 A -> B -> C -> D -> E。其中,E 干的事儿是删除 CD。这样做的好处在于,你 git push origin master 就不会有上面的报错了。但,历史线上还是会保留 CD 这两个 commit。如果使用这个命令,记得要 add 然后 commit

    .

    git reset --hard 会直接删掉 CD,形成 A -> B 这样的结果。好处在于更直接更彻底。缺点在于,首先要通过 git push origin master --force 去强行更改。其次,一旦你后悔了,除非根据本地的 reflog

    akan memadam terus 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.

    Tidak kira yang mana satu yang anda gunakan, sila pilih mengikut keperluan anda. 🎜🎜

    balas
    0
  • 漂亮男人

    漂亮男人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

    balas
    0
  • Batalbalas