commutateur branche git sans les fichiers de la caisse
Est-il possible dans git pour passer à une autre branche sans vérifier tous les fichiers? Après le changement de direction j'ai besoin de supprimer tous les fichiers, régénérer, commettre et revenir en arrière. Donc la vérification des fichiers est juste une perte de temps (et il y a environ 14000 fichiers - c'est une longue opération).
Pour rendre les choses claires:
J'ai besoin de tout cela pour télécharger la documentation à github.
J'ai repo avec gh-pages de la branche. Quand j'ai reconstruire la documentation localement, je l'ai copier des pensions de répertoire, commit et push à github. Mais je n'étais pas heureux parce que j'ai eu deux copies de la documentation locale. Et j'ai décidé de creaty vide branche et après la validation d'interrupteur à vide et supprimer des fichiers. Mais le passage de dos est une opération longue - j'ai donc demandé à cette question.
Je sais que je peux juste laisser sur gh-pages de la branche et de supprimer les fichiers, mais je n'aime pas le sale travail d'arbres )
- Combien de temps est "long" pour vous? Quelle plate-forme travaillez-vous? Vous travaillez sur un réseau comme avec NFS ou autre partage de fichiers?
- Quel est le but de cet exercice? Voulez-vous d'avoir deux branches, l'une avec détaillés s'engage, le deuxième enregistrement de seulement les changements importants (gros grains)?
- Peut-être qu'il est moins cher de créer un temporaire (ou permanent?) clone de votre copie de travail. Ma réponse similaire et un article montrer comment cela fonctionne même comme un sous-répertoire du dépôt principal.
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez le faire.
Si vous avez besoin de s'engager sur cette branche, vous aurez envie de réinitialiser l'index trop sinon vous allez finir par commettre quelque chose basé sur la date de dernière vérification de la succursale.
echo "ebff34ffb665de0694872dceabe0edeaf50ec5a9" > .git/HEAD
suivie pargit reset
à point pour une ref au lieu d'une branche.git update-ref HEAD refs/heads/otherbranch
git stash
2.git checkout -b otherBranch
3.git stash pop
En utilisant les commandes git seulement:
Cette réponse est un peu plus longue que celle de Charles, mais il est constitué uniquement de base commandes git que je peux comprendre et donc n'oubliez pas, éliminant le besoin de continuer à chercher jusqu'à.
Marquer votre emplacement actuel (commettre d'abord si nécessaire):
Reset (se déplace) le marqueur à l'autre branche sans changer de travail dir:
maintenant temp et d'autres point de branchement de la même livraison, et votre travail dir est intacte.
depuis votre TÊTE est déjà pointant vers la même livraison, de travail dir n'est pas touché
Notez que ces commandes sont également disponibles à partir de tout client graphique.
git reset --soft <branch where you want to go>
pour éviter la mise à jour de l'indexNe serait pas une meilleure solution pour avoir les deux répertoires (deux zones de travail) avec un seul référentiel, ou même deux référentiels?
Il est git-nouvelle-workdir outil
contrib/
section pour vous aider avec ceci.git-new-worktree
script est antérieure àgit worktree
sous-commande; cette commande n'est pas disponible lorsque la réponse a été écrit. Le script par exemple exige support des liens symboliques; à mon humble avis il est préférable d'utiliser un support natif.Pour le bénéfice du lecteur:
Alors je pense que Charles Bailey solution est correct, cette solution a besoin d'un tweak lors du passage à quelque chose, ce qui n'est pas une succursale locale. Aussi il devrait y avoir une façon de faire avec les commandes qui est facile à comprendre. Voici ce que j'ai trouvé:
Expliqué:
git checkout --detach
est le même quegit checkout HEAD^{}
qui quitte la direction de derrière et va dans "détaché de la tête de l'état". Donc, la prochaine modification deHEAD
plus aucune touche n'importe quelle branche. Le détachementHEAD
n'affecte pas la worktree ni l'index.git reset --soft commitish
se déplace ensuiteHEAD
pour le SHA de lacommitish
. Si vous voulez mettre à jour l'index, trop, laissez--soft
loin, mais je ne recommande pas de le faire. Encore une fois, cela ne touche pas le worktree, et (--soft
) pas l'index.git checkout commitish
attache ensuiteHEAD
à lacommitish
(direction) de nouveau. (Sicommitish
est un SHA rien ne se passe.) Cela, aussi, n'affecte pas d'index ni worktree.Cette solution accepte tout ce qui se réfère à un commit, donc c'est idéal pour un peu de
git
alias. Lerev-parse
ci-dessous est juste un test pour s'en assurer, rien de ruptures dans la chaîne, telles que les fautes de frappe ne pas changer accidentellement dans détaché de la tête de l'état (erreur de récupération serait plus complexe).Cela conduit à la suite
git switch treeish
alias:Pour info, vous pouvez le trouver dans ma liste de
git
alias.$@
plutôt que$*
? La différence est que $@ avec développez pas cité les arguments qui ont des espaces à l'intérieur.$@
est définitivement pas là.$*
est utilisé à la place de$1
, tels quegit switch -f b
devient la même quegit switch '-f b'
qui doit être une erreur. De cette façon, je peux raccourcir l'alias en laissant à l'écart des erreurs de manipulation comme!f() { [ 1 = $# ] || { echo 'WTF!'; return 1; }; ..
Je pense que vous êtes à la recherche pour la plomberie de commande
git lire-tree
. Cela permettra de mettre à jour l'index, mais ne mettra pas à jour les fichiers dans votre répertoire de travail. Par exemple, en supposant quebranch
est le nom de la branche de lire:Si vous souhaitez vous engager pour la branche que vous venez de lire, vous aurez aussi besoin de:
Vous pouvez remplacer votre TÊTE de fichier avec un autre nom de la branche:
echo "réf: refs/heads/MyOtherBranch" > .git/TÊTE
git symbolic-ref HEAD refs/heads/MyOtherBranch
kernel.org/pub/software/scm/git/docs/git-symbolic-ref.htmlgit symbolic-ref
?Avec beaucoup de fichiers, vous pouvez peut-être mieux de les garder deux repos, un pour chaque branche. Vous pouvez extraire les modifications dès que nécessaire. Cela va être moins surprenant que d'essayer de jouer le scorbut astuces avec git.
git-new-worktree
à la place (danscontrib/
)Si vous essayez simplement de modifier l'endroit où une branche distante de points, vous pouvez le faire avec "git push" sans toucher à votre copie locale.
http://kernel.org/pub/software/scm/git/docs/git-push.html
par exemple, pour mettre à jour foo de commettre c5f7eba procédez de la manière suivante:
Ne sais pas si c'est ce que vous avez été au bout ou pas.
vous pouvez faire usage de
précédente-branche-commit-id est la validation de l'endroit où vous voulez copier les anciennes données.