所以我有一个新的非裸git repo(git init)。
然后我做了一个初始提交(git commit -a -m“initial commit”)
现在有人创建了一个新分支(branchEx)来执行实验 他也承诺了 他使用(git push -u origin branchEx)推送它
但团队中的其他人对主分支进行了重要更改
要继续实验,我们需要使branchEx完全复制master分支的内容并重新启动我们的实验。
请注意,我们不关心branchEx的提交更改。我们只想让branchEx完全复制主分支
答案 0 :(得分:1)
所以你有
A -- B <--(master)
\
X -- Y -- Z <--(branchEx)
因为您不关心branchEx
上的提交,我建议您移动branchEx
引用。例如
git checkout master
git branch -f branchEx
现在,在您的本地仓库中,就像在branchEx
新创建master
一样。
A -- B <--(master)(branchEx)
(技术上提交X
,Y
和Z
仍然存在,但它们现在可能无法从任何参考文件中获取,最终可能会被垃圾回收。)
这意味着你必须做一个强制推动,这通常我想避免的东西;我在这种情况下会这样做的原因是,这是一次性费用。我可以设想避免它的方法,但除了更复杂之外,它们还有成本,不会消失,而且会消失。&#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