Git pull不断删除我添加的所有内容

时间:2009-07-18 04:37:11

标签: git merge

我有一个git repo(让我们称之为“默认”)文件A,B和C.(我实际上用svn更新了其他人的修改。)

我将该repo克隆为“defaultmods”并添加文件D,E和F.

我注意到有人更新了A和C并添加了文件G,所以我希望这些文件更新并想要新文件(G)。

我转到我的“defaultmods”仓库并提交我的更改。然后从默认情况下执行git pull。它会删除我的文件(D,E和F),并为我提供默认的精确工作副本。

我想要的是将我的东西与更新的东西合并,给我A,B,C,D,E,F和G(使用更新的A和C以及新的G文件)。

我错过了一些奇怪的东西吗?这样做不行吗?

3 个答案:

答案 0 :(得分:2)

你必须要留下一些东西,因为事实上它确实值得这样:

$ 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 :(得分:2)

你想要:A,C和G.做:

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

你现在有A,C和G.想要它在defaultmods?做:

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

此时决定将defaultmod合并为默认值?做:

cd default
git merge ../defaultmods

应该是一个干净的。

答案 2 :(得分:1)

  

我有一个git repo(让我们称之为   默认情况下,文件A,B,C。(I   实际上更新其他修改   与svn)

所以,我们有R1:{A,B,C}

  

我将该repo克隆到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虽然会落后。这很好,但是如果你们正在合作,可能会导致潜在的合并冲突。