【问题标题】:I need to merge a copy of my website with only one commit我需要将我的网站副本与一次提交合并
【发布时间】:2015-04-16 15:22:09
【问题描述】:

我在 github 上有一个 git repo。

有人拿到了 repo(复制,而不是分叉;我不完全确定如何或为什么),对其中大约四分之一的文件做了很多工作,然后将新的 git repo 上传到他们自己的区域在 github 中只包含一个提交 - 一个初始提交,包含所有内容。

如果我尝试 git 合并,那么每个文件都会出现冲突;它认为我们都从头开始添加文件。我们当然有。

我可以手动区分并合并它们。但我真的宁愿不必这样做。

我在他的 repo 中添加了一个遥控器。

有没有一种明显的方法可以只合并已更改的文件?

【问题讨论】:

  • git patch 适合你吗?
  • 你可以尝试来自另一个仓库的git cherry-pick。如有必要,您必须解决该提交中每个已修改文件的冲突。

标签: git github merge


【解决方案1】:

可能的解决方案:

git fetch https://github.com/blah/other-repo.git <branch> && git cherry-pick <commit>

它的行为类似于合并,如果出现冲突,您必须手动解决它们,但只能从修改后的文件中解决。

【讨论】:

  • 另一个repo中只有一个commit,包含所有内容;因此,在这种情况下,git cherry-pick 与 git merge 相同。
【解决方案2】:

对,新提交中的文件权限似乎已更改为 755;这就是导致所有内容都被标记为已更改的原因。

How do I make Git ignore file mode (chmod) changes? 表示问题可以通过使用来解决

git config core.fileMode false

不幸的是,这对我不起作用;可能是因为它只查看工作树中的更改而不是提交。

相反,我进入了新分支并做了以下操作

git diff --summary master | grep  'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -I {} chmod -x {}

然后关闭新分支中的所有可执行位。

git commit -a
git log --oneline

2f80315 Changing permissions to match master...
c7896aa The Commit From The Other Fella

git checkout master
git cherry-pick 2f80315
git commit --allow-empty

确保每个未编辑的文件的所有权限都匹配,此时a

git diff newfellasbranch

向我展示了他们所做的更改。我很高兴,所以

git merge newfellasbranch --strategy-option theirs

很可能有一种更简单的方法来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多