Git checkout命令不能更新文件

3

我有两个Git分支masterdevelop。由于各种原因,我的develop分支出了问题,我想把master中的所有文件都复制到develop中。我知道这不是正确的解决方案,但以下是我所做的:

git checkout master
cd ..
cp repo repo_master
cd repo
git checkout develop
cp -r ../repo_master/* .

奇怪的是,在将我的文件(应该在master版本中)复制到我的仓库后,运行以下命令:

git diff

没有显示任何内容。我不明白。更奇怪的是运行时

git diff master develop

显示了许多差异。

我做错了什么?还有,我该怎么做?


你需要在这里提供更多信息。到底是什么出了问题?它是在什么时候发生的,也就是说,它是在多少次提交之前发生的?解决这类问题的典型方法并不一定涉及另一个分支,而只是将事情重置回到达到稳定状态的点。 - Tim Biegeleisen
基本上我使用git flow,并想进行代码现代化(它使用Java 5),所以我有了一个非常糟糕的想法,将其视为一个功能。当我合并回到“develop”时,某些东西使整个代码翻倍了(我猜git只是估计这是处理冲突的最佳方法...),这就是我得到了一百多个小类无法编译的原因。我本来会重置的,但我正在一个功能分支上工作,而该分支被合并(是的,那就是问题所在)到“develop”,同时在“develop”上进行了其他更改。 - Thomas Kowalski
所以我想,考虑到我的修改性质,我宁愿撤回“主”代码 - 根据git flow的定义是工作的 - 并将其放回“开发”中,以便进行“新的开始”。 - Thomas Kowalski
Git不是这样工作的。如果整个分支存在问题,你不会像这样移动一堆源代码。相反,只需将您的“develop”分支重置为“master”的某个提交即可。我无法给出确切的答案,因为您当前的状态似乎很混乱。 - Tim Biegeleisen
4个回答

2
如果您不需要保留开发中的任何更改:

git branch -d develop将删除develop分支及其内容。

git checkout -b develop将复制当前分支(在您的情况下为master)到名为develop的新分支。

或者如果您需要在开发中保留任何内容:

git checkout develop

git merge master --no-ff,然后解决冲突(如果有)。


这是否也会删除我对develop分支所做的所有提交? - Thomas Kowalski
由于分支是提交的集合,答案是肯定的,它将从指定的分支中删除所有提交。如果您在任何时候将其与其他分支合并,则这些分支中的代码将保持不变。 - Vadim Aidlin

1
git checkout develop
git reset master

这将重置您的develop分支,使其与master分支完全匹配。所有特定于develop分支的提交将被删除。

0
git checkout develop
git checkout master -- .

第二个命令将所有文件从分支master复制到当前的工作树和索引。使用git diff --cached进行验证并提交。

0

您可以使用以下方法撤销合并:

git rebase -i --commiter-date-is-author-date HEAD~50

从提交列表底部开始删除行,直到您合并之前的最后一次提交。保存并退出文件。

再次检查您的最新提交,确保一切正常。

git log -n 10 --oneline

最后,覆盖你的远程override your remote

git push origin -f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接