/ / Git pull löscht alles, was ich hinzugefügt habe - git, merge

Git pull löscht immer alles, was ich hinzugefügt habe - git, merge

Ich habe ein Git Repo (lassen Sie uns "Standard" nennen) mit den Dateien A, B und C. (Ich aktualisiere andere "Modifikationen mit SVN.)

Ich klone dieses Repo auf "defaultmods" und füge die Dateien D, E und F hinzu.

Ich stelle fest, dass jemand A und C aktualisiert und die Datei G hinzugefügt hat. Ich möchte, dass diese Dateien aktualisiert werden und die neue Datei (G).

Ich gehe zu meinem Repository "defaultmods" und bestätige meine Änderungen. Dann machen Sie einen Git-Pull von Default. Es löscht meine Dateien (D, E und F) und hinterlässt eine exakte Arbeitskopie von default.

Was ich will, ist es, meine Sachen mit den aktualisierten Sachen zusammenzuführen, die mir A, B, C, D, E, F und G geben (mit den aktualisierten A und C und der neuen G-Datei).

Fehlt mir etwas komisches? Funktioniert das nicht so?

Antworten:

2 für die Antwort № 1

Es muss etwas geben, das Sie auslassen, weil es sich tatsächlich so lohnt:

$ 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

2 für die Antwort № 2

Sie wollen: A, C und G. Machen Sie:

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

Sie haben jetzt A, C und G. Möchten Sie es in defaultmods? Tun:

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

Entscheiden Sie sich jetzt, dass Sie defaultmods mit default zusammenführen möchten? Tun:

cd default
git merge ../defaultmods

Sollte sauber sein.


1 für die Antwort № 3

Ich habe ein Git Repo (nennen wir es Standardeinstellung) mit den Dateien A, B, C. (I Aktualisieren Sie andere Änderungen mit svn)

Also haben wir R1: {A, B, C}

Ich klone das Repo auf defaultmods und Dateien D, E und F hinzufügen ...

Also machst du ein:

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

Nun haben wir R2: {A, B, C, D, E, F} Jetzt ist alles fest und glücklich.

Jetzt sollten Sie etwas tun, um Folgendes zu bewirken:

git pull /path/to/R1 master

um die Änderungen zu ziehen, die R1 vorgenommen hat.

Nun R2: {A, B, C, D, E, F, G} mit Änderungen an A und C. R1 wird aber zurückbleiben. Das ist in Ordnung, kann jedoch zu Konflikten führen, wenn Sie zusammenarbeiten.