Comment soumettre l'ancienne version annulée du code et les fichiers modifiés à la branche principale sur github
巴扎黑
巴扎黑 2017-06-16 09:19:00
0
2
1187

Peut-être que ce que je dis n'est pas très clair, mais au fur et à mesure que j'écrivais le code, j'ai découvert que je ne voulais plus le faire, alors j'ai utilisé git reset --hard <版本号> pour revenir à une version précédente et la réécrire, de sorte que quand j'ai fini en écrivant, je voulais le soumettre à l'entrepôt distant, il signalera une erreur

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.

Il a été dit que ma version était la précédente et que je devais la fusionner puis la soumettre. Que dois-je faire. Je l'ai essayé plusieurs fois mais je ne l'ai toujours pas compris.

巴扎黑
巴扎黑

répondre à tous(2)
黄舟

Tout d'abord, selon votre description, puisque vous avez utilisé git reset --hard,那就可以推断出你已经 addcommit 过了。
其次,根据报错,可以推断出你已经 push (cette inférence est basée sur le fait que vous seul disposez des autorisations de modification de la branche principale.

Ensuite, lorsque vous exécutez git reset --hard, les enregistrements historiques ne peuvent pas être directement fusionnés avec les enregistrements distants. C'est pourquoi il y a cette erreur.

Par exemple, la télécommande est A -> B -> C -> D,你 git reset --hard 之后是 A -> B。这时候除非远程那边抹掉 CD et votre

est suivi de A -> À l'heure actuelle, à moins que le côté distant n'efface C et D, il ne peut pas être fusionné.

git push origin master --forcePar conséquent, à ce stade, vous devez utiliser pour forcer l'écrasement de l'enregistrement distant.

git pull。否则,你的本地又会变成 A -> B -> C -> D。因为 git pull 相当于 git fetch + git mergeVeuillez ne pas utiliser selon les instructions


A -> B -> C -> D (Le contenu suivant est basé sur l'exemple ci-dessus, la télécommande est

et vous souhaitez revenir à l'état B)

git revert。其实,git reset --hardgit revertgit revert a été mentionné à l'étage. En fait,

et git revert peuvent obtenir un "code de restauration". Mais la différence est :

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

supprimera directement C et D, formant un résultat comme A -> L’avantage est que c’est plus direct et plus approfondi. L'inconvénient est qu'il faut d'abord forcer le changement

. Deuxièmement, une fois que vous le regrettez, il n'y a pas d'autre moyen que de restaurer directement le pointeur HEAD selon le reflog local.

Peu importe celui que vous utilisez, veuillez choisir en fonction de vos besoins. 🎜🎜
漂亮男人

D'une manière générale, essayez d'éviter cette situation.

Si vous avez l'autorisation d'accéder au maître distant, vous pouvez faire ceci :

git push --force

Une approche plus raisonnable consiste à utiliser git revert


Modifier les lignes de démarcation

Un autre étudiant @S1ngS1ng a donné une réponse plus détaillée, mais il a souligné que n'importe lequel peut être utilisé. Je dois encore réitérer que git revert est l'approche la plus appropriée

.

Lorsqu'il s'agit d'un scénario de développement multi-personnes, il est très probable que le dernier code ait été extrait par d'autres sur le maître distant ou fusionné dans d'autres branches. Dans ce cas, la réinitialisation ne sera pas valide, car l'autre partie peut toujours pousser. et je souhaite le supprimer.

Donc, cette idée selon laquelle vous pouvez utiliser n'importe qui a en fait des limites

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal