【问题标题】:Git Merge some folderGit合并一些文件夹
【发布时间】:2016-03-10 10:03:53
【问题描述】:

我有两个名为 A 和 B 的 git 本地分支(分别指向远程分支 origin/A 和 origin/B。

Branch - A:

Folder-1
   File-11
   File-12
Folder-2
   File-21
   File-22

Branch - B:
Folder-2
   File-22
   File-23
Folder-3
   File-31
   File-32

我想将分支 B 与分支 A 合并。

git checkout A
git merge B

最终的结果应该是这样的。

Branch - A:
Folder-1
   File-11
   File-12
Folder-2
   File-21
   File-22 (Branch -A file).
Folder-3
   File-31
   File-32

单独合并 Folder-3,将 Folder-1 和 Folder-2 保留在分支 A 中。

基本要求是,我不应该丢失日志(和提交)历史记录。

怎么做?

提前致谢。

【问题讨论】:

  • 进行合并然后按照您想要的方式重新排列文件夹有什么问题吗(当然是在解决合并冲突之后)?我不确定我是否理解你为什么要问一个问题。
  • 你可以创建一个branch C out of branch B delete Folder-1 and Folder-2 然后 merge branch C 到 branch A
  • 如何创建本地分支C?我不希望分支 C 被推送到远程 git repo,我需要做什么?
  • @TimBiegeleisen:合并后我会遇到 Folder-2/File-22 和 Folder-2/File-23 的合并冲突。我不希望两者都发生。
  • 然后解决冲突并处理它。我相信这是要走的路。

标签: git github merge git-merge


【解决方案1】:

如果您想将提交标记为合并提交,这是一种方法:

# from branch A :
git checkout A

# say "start a merge commit, I initially want to only keep the content of A" :
git merge -s ours --no-commit B
  # -s ours : keep current branch content (current branch is A)
  # --no-commit : do not run the 'git commit' command yet, I will do it later

# say "get me the content of Folder-3 from branch B" :
git checkout B -- Folder-3/

# and commit this new content on top of branch A :
git commit

使用此选项:分支B 将被标记为合并到A,您将看到提交历史:

$ git log --oneline --graph A
* aa1234 (HEAD -> A) Merged branch 'B' into A
|\
| * bb1234 (B) update 3 on branch B
| * cc1234 update 2 on branch B
| * dd1234 update 1 on branch B
...

如果你只是想将Folder-3 的内容从B 分支添加到A 分支,而不关心将这个提交变成合并提交,这里有一个更简单的方法:

# from branch A :
git checkout A

# say "get me the content of Folder-3 from branch B" :
git checkout B -- Folder-3/

# and commit this new content on top of branch A :
git commit

【讨论】:

  • 这个“git checkout B -- Folder-3/”是否也复制了日志和提交历史?
  • @Surendhar :是git merge 做到了这一点。那么你需要第二个版本。
【解决方案2】:

试试这个:

$ git checkout branchB
$ git checkout -b branchC
$ rm -rf folderA and folderB //pseudocode. Remove folder A and B
$ git checkout branchA
$ git merge branchC
$ git add -A
$ git commit -m "Added folderC"
$ git push

$ git branch -d branchC

【讨论】:

  • 在 "rm -rf folderA and folderB" 之后,我需要提交或做任何其他事情来反映 branchC 中的更改吗?
  • 是的,如果你愿意的话。做git add -A和git commit只是为了安全起见,然后将branchC合并到branchA中。
【解决方案3】:
git checkout B
git add Folder-3
git add Folder-2/File-23
git checkout -- Folder-2/File-22
git comit -m "add Folder-3"
git checkout A
git merge B 

【讨论】:

  • git checkout -- 会做什么?
  • git checkout -- 文件名取消编辑此文件以获取原始副本
猜你喜欢
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多