【问题标题】:Push git to remote (Github) only one last commit, without history?将 git 推送到远程(Github)只有最后一次提交,没有历史记录?
【发布时间】:2021-06-24 04:43:11
【问题描述】:

我想推送我的项目并在 Github 和我的同事上分享这个 repo。但是我有一个问题,在我开发项目时,我提交了一些私人的东西,例如git 的密码,所以我不想将历史提交到 Github。我只需要分享项目的最新版本,最后一次提交到 Github,没有过去的提交,历史。

我尝试了什么:

git push -u github_tmp d3710442f80889be21324d5be14a25fe4a0d0274:refs/heads/main

这不起作用,这确实提交到 Github,但它显示我不是 1 次提交,而是 26 次提交(是的,包括分支上所有过去的提交历史记录)

那么,我该怎么做呢?谢谢。

【问题讨论】:

  • 我不认为存在“浅推”(类似的,浅拉存在并且与您想要的相反)。有关详细信息,请参阅this questiontl;dr 最好重新设置基础以使本地历史显示为您想要的,然后推送它。
  • 如果您只想推送您的最后一次提交并且不需要任何历史记录,为什么不直接删除.git 目录并使用git init 重新初始化您的存储库,使用@987654326 设置您的远程@ 命令,然后推送到该远程 GitHub 存储库。或者你可以在推送之前尝试压缩你的提交。如果Squash and Merge 是您的 GitHub 公关审阅者遵循的一般方法,那么我认为您没有理由担心,因为他们无论如何都会成为您的公关人员 Squashing and then Merging。如果你有合并 PR 的权限,你也可以自己做。
  • 这能回答你的问题吗? How to push new branch without history
  • 请注意提交是历史
  • 你试过git rebase在本地删除那些提交吗?

标签: git github git-push git-remote


【解决方案1】:

最好的方法是git rebase。您可以删除不想被推送的提交。 您还可以将您希望被视为单个提交的任何提交“压缩”在一起。

如果你想在本地保存提交,那么你可以创建一个新的分支来推送。

git switch -c my-branch-to-push
git rebase -i oldest-commit-to-start  my-branch-to-push

现在您可以编辑提交列表,并且可以从中删除条目。 然后你 git push 新分支。 (可能需要设置上游跟踪)

当然,如果你的当前分支已经有上游集,那么你保留新创建的分支,并重新设置当前分支。


你也可以这样做

git filter-branch

https://git-scm.com/docs/git-filter-branch 但它有它的陷阱......

【讨论】:

    【解决方案2】:

    如果您不需要本地历史记录,您可以使用混合重置重置到原始分支,

    git reset --mixed origin/<branch>
    

    使用混合重置,您会丢失您的历史记录,但不会丢失您的更改,您的工作目录不会发生任何事情

    有关重置的更多信息 https://git-scm.com/docs/git-reset

    此时你没有什么可推送的,你可以在新的提交中提交

    【讨论】:

      猜你喜欢
      • 2017-04-11
      • 2015-01-16
      • 1970-01-01
      • 2014-05-05
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 2015-07-24
      相关资源
      最近更新 更多