GIT - 强制侧分支从主分支复制内容(非裸)

时间:2017-07-13 19:17:23

标签: git github version-control

所以我有一个新的非裸git repo(git init)。

然后我做了一个初始提交(git commit -a -m“initial commit”)

现在有人创建了一个新分支(branchEx)来执行实验 他也承诺了 他使用(git push -u origin branchEx)推送它

但团队中的其他人对主分支进行了重要更改

要继续实验,我们需要使branchEx完全复制master分支的内容并重新启动我们的实验。

请注意,我们不关心branchEx的提交更改。我们只想让branchEx完全复制主分支

2 个答案:

答案 0 :(得分:1)

所以你有

A -- B <--(master)
 \
  X -- Y -- Z <--(branchEx)

因为您不关心branchEx上的提交,我建议您移动branchEx引用。例如

git checkout master
git branch -f branchEx

现在,在您的本地仓库中,就像在branchEx新创建master一样。

A -- B <--(master)(branchEx)

(技术上提交XYZ仍然存在,但它们现在可能无法从任何参考文件中获取,最终可能会被垃圾回收。)

这意味着你必须做一个强制推动,这通常我想避免的东西;我在这种情况下会这样做的原因是,这是一次性费用。我可以设想避免它的方法,但除了更复杂之外,它们还有成本,不会消失,而且会消失。&#34;只是通过完成烦人的程序。

所以:

git checkout branchEx
git push -f

现在,我正在讨论的是一次性成本:从任何可能包含origin/branchEx refs的克隆的角度来看,这个ref已经以意想不到的方式移动了。如果这样的克隆有一个(本地)分支将origin/branchEx视为上游(通常这将是一个名为branchEx的本地分支),那么它将需要与此意外移动同步。一种方法是

git checkout branchEx
git pull -f

因此,在您考虑做“强迫”的时候,与您的团队进行协调非常重要。推。

答案 1 :(得分:0)

您应该使用git rebase。它会更新您的分支并尝试在其上应用本地提交。

示例:

git checkout branchEx
git rebase master

可能存在冲突,您需要解决它们。如果没有冲突,你就完成了。

如果您要放弃所有本地提交,那么您应该git reset --hard。例如:

git checkout branchEx
git reset --hard master