题 删除所有内容并上传新版本


我们正在使用git进行版本控制,现在我们在尝试上传最新版本时收到很多警告。我是git的新手并且对这些限制没有耐心,有没有办法删除所有内容并上传当前版本?

这是我在尝试上传时获得的。

$ git push origin master
Username for 'https://code.google.com':
Password for 'https://<removed>@code.google.com':
To https://code.google.com/p/<removed>/
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://code.google.com/p/<removed>/'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

12
2018-06-17 12:52


起源


它将有助于显示您正在尝试的命令序列以及您获得的输出 - Paul Dixon
“删除所有内容并上传当前版本”的声音非常类似于您没有使用git进行版本控制,而是将其用作发布工具的替代品。你能发布你得到的警告吗?即使你没有耐心去理解他们,如果他们能够提供帮助,别人也必须这样做。 - CB Bailey
我粘贴了我现在得到的提示。我理解我以前得到的东西,但它似乎不必要,因为我的计算机上的代码工作得很好,在线版本的代码已经过时了。我只是想重新开始。我为什么这么犯规我不知道 - wolfdawn
您没有本地计算机上的当前版本..做一个 git pull 再试一次之前。 (然后你可以做我在我的回答中写的解决方案) - Michael Kohler
@ArthurWulfWhite:远程版本没有过时,因为它不仅仅是你拥有的旧版本。它包含不在当前本地主分支中的提交。谁推动了这些提交,为什么你不想要他们引入的更改? - CB Bailey


答案:


1.)删除存储库文件夹中的所有内容

2.)跑 git rm * 告诉git删除所有文件(请查看 git status 是否有任何未分级的文件)

3.)做一个 git commit -a -m "commitmessage" 一个 git push origin master 删除远程git服务器上的所有文件

4.)检查您现在是否有空的远程存储库

5.)将所有新文件复制到本地存储库文件夹

6.)跑 git add * 告诉git添加所有新文件(请查看 git status 是否有任何未分级的文件)

7.)提交并推送新文件

现在您应该在远程git存储库上安装该版本。


21
2018-06-17 13:03



嗨,我粘贴了我现在得到的结果,你能帮忙吗? - wolfdawn
为什么不能 git push -f 使用? - vincent mathew
在我知道问题是推送命令之前,我写了答案。我以为亚瑟不知道如何“开始新的”。在编辑的问题中,我认为 git push -f 如果远程git存储库能够达到您的预期,即使我不确定,也会有用。 - Michael Kohler
最初的问题与我在尝试迈克尔提供给我的指示后遇到的问题不同,因此他的回答非常适合这种情况。删除代码并启动a-new之前的原始问题是我的版本和在线版本之间有大约20个不同的文件,其中一些甚至不需要存在。我没有时间或耐心去逐个文件合并,所以我只是清理了git。这是我的项目,即使是不明智/不良做法,这就是我认为合适的道路。 - wolfdawn


您无法推送,因为远程提交没有合并到您尝试推送的提交。如果要放弃当前遥控器中的所有更改,可以执行以下操作。

git fetch
git merge -s ours origin/master
git push origin master

请注意,这会丢弃您在本地存储库中没有的远程更改。


13
2018-06-17 15:18



仅供将来参考,添加 --allow-unrelated-histories 在较新的git版本中的merge命令。 - Dominik König


如果你想永久删除远程存储库中的文件,并且回想起来就好像它们没有被推到一开始就重新开始,那么基于 这个答案 你可以做到以下几点

在本地运行以下命令(请注意 * 删除每个文件夹/文件):

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch *" -- --all

现在是时候在本地更新git引用以强制它忘记它们对这些文件的所有历史记录

rm -rf .git/refs/original/

git reflog expire --expire=now --all

git gc --prune=now

git gc --aggressive --prune=now

现在使用FORCE将所有更改推送到远程存储库,以确保远程仓库也清除所有这些文件

git push --all --force

这将清理远程存储库,就好像没有文件存在一样。


2
2017-10-02 09:56