2010-11-08 5 views

Répondre

1

On dirait que vous voulez faire ceci:

# add the file you care about to the index 
# if other stuff is already there, use git reset HEAD to wipe it out first 
git add <important-file> 

# stash away all other modifications, but keep the index 
git stash --keep-index 

# stash the single file from the index 
git stash 

# check out the master branch 
git checkout master 

# apply the change to the single file (your second stash) 
git stash pop 

# commit 
git commit 

# return to the other branch 
git checkout <other-branch> 

# restore the first stash (all other work) 
git stash pop 

Si vous souhaitez enregistrer cela comme une fusion, au lieu de commettre directement à maîtriser, vous pouvez créer une nouvelle branche de vérifier, engager à lui , vérifiez maître, et fusionnez-le (au lieu de vérifier maître et commettre, comme je l'ai fait ci-dessus).

+0

est-ce que ça garde l'histoire? – erjiang

+0

@erjiang: Cela ne modifie pas l'histoire, si c'est ce que vous voulez dire. Regardez les opérations utilisées - basculer entre les branches, commettre, et en utilisant stash (qui stocke juste les modifications locales, puis les restaure). – Cascabel

+0

Eh bien, je suis curieux de savoir si ce fichier contient des informations sur l'origine du processus, mais il ne ressemble pas à ça. – erjiang

0

Désolé, je ne suis pas sûr de ce que vous voulez dire par la question, voulez-vous enregistrer toutes les modifications apportées à un seul fichier dans le référentiel, auquel cas vous utiliseriez git commit -a, ou voulez-vous merge la branche vous êtes sur, qui contient un nouveau fichier, retour à la branche d'origine, auquel cas vous utiliseriez git checkout master, puis git merge name_of_branch_to_merge. Pour obtenir une version du référentiel à utiliser pour la collaboration ou pour travailler sur une machine distante, ce que je pense que vous demanderez ensuite, vous pouvez utiliser git clone /path/to/original/repository name_of_new_repository, puis le nouveau répertoire name_of_new_repository contiendra les fichiers et l'historique de la branche originale que vous pouvez travailler séparément à l'original.

+0

J'ai un repo qui a beaucoup de fichiers. L'un d'entre eux a eu une mise à jour qui a vraiment besoin de revenir rapidement au cœur, alors que le reste de la branche est inachevé. –

+0

Je dirais 'git checkout master', puis' git fetch' suivi de 'git merge FETCH_HEAD: crucial_file.txt'. Regardez http://www.kernel.org/pub/software/scm/git/docs/git-pull.html pour plus d'informations. –

1

tout ce que vous devez faire est:

git checkout master 
git checkout other_branch -- path/your_file 
git add . -A 
git commit -m "your message" 
git push origin master 

Cela suppose "origine" est votre télécommande.

+0

Il est possible que ce soit ce que l'OP souhaite, en supposant que la modification a déjà été validée dans l'autre branche, mais il est préférable de ne pas aboutir dans cette situation en effectuant des changements identiques dans deux branches séparées. Dupliquer l'historique – Cascabel

Questions connexes