2009-07-18 8 views
3

J'ai un git (appelons-le "default") avec des fichiers A, B et C. (mettre à jour en fait les modifications des autres avec svn.)git pull continue de supprimer tout ce que j'ai ajouté

I clone que repo à "defaultmods" et ajouter des fichiers D, E et F.

Je remarque que quelqu'un a mis à jour A et C et ajouté le fichier G donc je veux que ces fichiers mis à jour et que vous voulez le nouveau fichier (G). Je vais à mon repo "defaultmods" et valide mes modifications. Ensuite, faites un git pull à partir de la valeur par défaut. Il supprime mes fichiers (D, E et F) et me laisse avec une copie de travail exacte par défaut. Qu'est-ce que je veux, c'est de fusionner mes trucs avec les trucs mis à jour en me donnant A, B, C, D, E, F, et G (avec les A et C mis à jour et le nouveau fichier G).

Ai-je oublié quelque chose d'étrange? Cela ne fonctionne-t-il pas de cette façon?

+0

Merci à tous pour votre aide. Je l'ai fait fonctionner en supprimant tout, en le refaisant, puis en faisant face à mes changements.J'ai dû faire quelque chose quand j'ai commencé à bousiller mon index ... maintenant elle fonctionne très bien. – that0n3guy

Répondre

2

Il doit y avoir quelque chose que vous partez, parce qu'il fait, en fait, d'une valeur de cette façon:

$ mkdir default 
$ cd default/ 
$ git init 
Initialized empty Git repository in /Users/jim/Desktop/default/.git/ 
$ echo "A" > A; echo "B" > B; echo "C" > C 
$ git add . && git commit -m "Initial commit" 
[master (root-commit) 318f655] Initial commit 
3 files changed, 3 insertions(+), 0 deletions(-) 
create mode 100644 A 
create mode 100644 B 
create mode 100644 C 
$ cd .. 
$ git clone ./default ./defaultmods 
Initialized empty Git repository in /Users/jim/Desktop/defaultmods/.git/ 
$ cd defaultmods/ 
$ echo "D" > D; echo "E" > E; echo "F" > F 
$ cd ../default 
$ echo "A, updated" > A; echo "C, updated" > C; echo "G" > G 
$ git add . && git commit -m "Upstream update" 
[master 4485f72] Upstream update 
3 files changed, 3 insertions(+), 2 deletions(-) 
create mode 100644 G 
$ cd ../defaultmods/ 
$ git add . && git commit -m "Mods commit" 
[master a393e70] Mods commit 
3 files changed, 3 insertions(+), 0 deletions(-) 
create mode 100644 D 
create mode 100644 E 
create mode 100644 F 
$ git pull 
remote: Counting objects: 8, done. 
remote: Compressing objects: 100% (2/2), done. 
remote: Total 5 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (5/5), done. 
From /Users/jim/Desktop/./default 
    318f655..4485f72 master  -> origin/master 
Merge made by recursive. 
A | 2 +- 
C | 2 +- 
G | 1 + 
3 files changed, 3 insertions(+), 2 deletions(-) 
create mode 100644 G 
$ cat * 
A, updated 
B 
C, updated 
D 
E 
F 
G 
1

J'ai un git (permet de l'appeler par défaut) avec des fichiers A, B, C. (I fait mettre à jour d'autres modifications avec svn)

Donc, nous avons R1: { A, B, C}

I clone qui repo à defaultmods et ajouter des fichiers D, E et F ...

Alors, vous faites:

git add .  
git commit -a -m "Added D, E, and F" 

Maintenant, nous avons R2: {A, B, C, D, E, F} Donc, maintenant tout est déterminé et heureux.

Maintenant, vous devriez faire quelque chose à l'effet de:

git pull /path/to/R1 master 

pour tirer les changements R1 a fait. Maintenant, R2: {A, B, C, D, E, F, G} avec des changements à A et C. R1 va être en retard cependant. Ce qui est bien, mais peut causer des conflits de fusion potentiels si vous collaborez.

2

Vous voulez: A, C et G. Do:

cd default 
git pull [wherever A, C and G are located] 
[resolve merges] 

Vous avez maintenant A, C et G. Voulez-vous dans defaultmods? Est-ce que:

cd defaultmods 
git rebase ../default 
[resolve merges] 

Décidez à ce stade que vous voulez fusionner les defaultmods par défaut? A faire:

cd default 
git merge ../defaultmods 

Doit être propre.

Questions connexes