/ / Git pull продовжує видаляти все, що я додав - git, merge

Git pull продовжує видаляти все, що я додав - git, merge

У мене є git-репо (назвемо його "за замовчуванням") з файлами A, B і C. (Я фактично оновлюю інші "модифікації за допомогою svn.)

Я клоную це репо до "defaultmods" і додаю файли D, E та F.

Я помічаю, що хтось оновив A та C та додав файл G, тому я хочу, щоб ці файли оновились і хочу новий файл (G).

Я переходжу до мого репозиторію "defaultmods" і фіксую свої зміни. Потім виконайте git pull за замовчуванням. Він видаляє мої файли (D, E та F) і залишає точну робочу копію за замовчуванням.

Я хочу, щоб це об’єднало мої речі з оновленими матеріалами, що дають мені A, B, C, D, E, F та G (з оновленими A та C та новим файлом G).

Мені чогось дивного не вистачає? Чи не працює це так?

Відповіді:

2 для відповіді № 1

Має бути щось, що ти залишаєш поза увагою, бо насправді це варто таким чином:

$ 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 для відповіді № 2

Ви хочете: A, C та G. Виконайте:

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

Тепер у вас є A, C і G. Хочете це в стандартних режимах? Зробіть:

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

Вирішіть на цьому етапі, що хочете об’єднати за замовчуванням моди за замовчуванням? Зробіть:

cd default
git merge ../defaultmods

Має бути чистим.


1 для відповіді № 3

У мене є git repo (давайте назвемо це за замовчуванням) з файлами A, B, C. (I фактично оновити інші модифікації з svn)

Отже, маємо R1: {A, B, C}

Я клоную це репо до defaultmods та додати файли D, E та F ...

Отже, ви робите:

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

Тепер у нас є R2: {A, B, C, D, E, F} Отже, зараз все віддано і щасливо.

Тепер ви повинні щось зробити, щоб:

git pull /path/to/R1 master

щоб внести зміни, внесені R1.

Тепер R2: {A, B, C, D, E, F, G} із змінами на A та C. R1 все ж буде позаду. Це нормально, але може викликати конфлікти об’єднання, якщо ви, хлопці, співпрацюєте.