Envoyer les modifications à github sans tirer
J'ai une situation stupide. J'ai développé un projet qui a été développé par un autre développeurs. J'ai envoyé mes sources à la précédente développeurs de faire des changements dans leurs sources. Mais ils ont dit qu'ils n'ont jamais travailler avec git. Ils ont donc ajouté des modifications à ces projets et c'est la version réelle maintenant. Mais il n'est pas sous contrôle de version de code.
Donc j'ai déjà s'engage sur le github et j'ai besoin de pousser cette nouvelle version.
Ce que j'ai fait:
- git init
- git remote add origin
- git add .
- git push origin master
Mais ici, c'est un problème, je ne peux pas pousser de nouvelles modifications avant la mise à jour de repo local de cours. Mais si je mettre à jour mon repo il sera de retour tous les fichiers que le précédent, les développeurs ont supprimé.
Ma question: comment pousser version actuelle sans l'extraction de données de git.
Je sais comique de la situation, mais j'ai besoin d'aide ici.
Grâce
OriginalL'auteur Matrosov Alexander | 2013-10-10
Vous devez vous connecter pour publier un commentaire.
Il semble que d'autres personnes ont travaillé sur votre projet à l'extérieur de contrôle de version je.e nu de fichiers et de dossiers.
Je vous suggère de cloner le repo, copie ( et donc de le remplacer ) le contenu cloné avec le nouveau contenu, commit et push.
git init
etc vous essayez de créer entièrement de nouveaux repos, ce qui n'est pas ce que vous voulez.La création d'un nouveau commit avec les différences entre les pensions de l'état et le courant de l'état de la source des sons comme la meilleure solution possible à cette situation. C'est très simple, et conserve l'historique lors de l'enregistrement des modifications apportées par les autres correctement.
Je pense que le lien suivant donne une meilleure façon stackoverflow.com/questions/10510462/...
OriginalL'auteur manojlds
Vous pouvez forcer une poussée.
A forcé à pousser effacera toutes les commettre l'histoire de la télécommande du dépôt de la branche, et de le remplacer à votre succursale.
Vérifier les réponses pour faire forcé pousse ici. Forcé de pousser peut imprévues les conséquences cependant, afin de vérifier pour la même chose.
Modifier
A forcé à pousser va être une mauvaise façon de pousser les choses dans votre cas, puisque vous avez déjà précédente commits sur github, et cela va effacer la validation de l'histoire de la précédente s'engage.
Par conséquent, afin de préserver votre commit l'histoire, vous pouvez faire les choses suivantes
Supprimer tous les fichiers du dépôt git, puis ajouter les nouveaux fichiers ici, puis de valider la mise à jour des fichiers
Faire un
git status
maintenant vous indiquera tous les fichiers de l'autre, les développeurs ont modifié, et ungit diff
pour voir ce que toutes les modifications sont là.Si un fichier a restent inchangés, puis
git rm
etgit add
annulera l'effet de l'autre.Les fichiers qui ces développeurs supprimés restent supprimées depuis l'exécution de l'
git rm
pour eux, mais pas degit add
.Une fois que vous êtes satisfait de ce que nous sommes, en effet les modifications, vous pouvez valider à l'aide de
Potentiel de pièges
git rm -rf .
(et, de même.gitattributes
et d'autres fichiers). Réinitialisation de la TÊTE, pour chacun de ces fichiers à l'aide degit reset HEAD .gitignore
avant la validation.Je suis l'un des downvoters. J'ai voté contre parce que l'OP a déjà une version contrôlée de la source qui doit être mis à jour pour inclure des changements qui ne sont actuellement pas de contrôle de version qui ont été faites par d'autres personnes. La prise de la source de courant sans VC, la création d'un seul commit, et d'écraser l'existant de l'histoire est la pire solution possible au courant des modifications de ne pas être suivi. Il y a des moments quand ils sont forcés pousse sont utiles ou nécessaires, mais ce n'est pas un de ces cas. Comme mon précédent commentaire unis, la bonne façon de gérer cette situation est de créer de nouvelles s'engage, à ne pas effacer les anciens.
J'ai d'abord cru OP voulait un nouveau repo (embrouillés par les mesures qu'il était en train de faire pour
git init
). Merci! J'ai mis à jour ma réponse maintenant.OriginalL'auteur mu 無
Vous pouvez essayer
git stash
, qui va prendre un instantané de votre travail à l'arbre. Ensuite, vous pouvez tirer les changements à partir de github. Deman git stash
:Donc:
git n'a pas vraiment travailler avec des fichiers individuels, mais des "instantanés" de l'ensemble du travail de l'arbre.
git stash
va stocker un aperçu de tous les changements n'ont pas encore été enregistrées avecgit commit
. Sifoo
etbar
sont dans le dépôt github, etfoo
a changé au niveau local, mais pas sur github, puisgit stash
va stocker la différence entre le local et à distancefoo
, vous permettant de tirer, puis réappliquer les modificationsgit stash apply
. Une meilleure explication est git-scm.com/book/en/Git-Tools-StashingOriginalL'auteur ldrumm