git - 如何在不 pull 的情况下将更改推送到github

标签 git github

我开发了一个由其他开发人员开发的项目。我将我的代码发送给以前的开发人员以更改他们的代码,但他们说他们从未使用过 git,因此他们对项目进行了更改,现在它是实际版本但不受版本控制。

所以,我已经在 github 中提交了,我需要推送这个新版本。

我做了什么:

  1. git 初始化
  2. git remote add origin
  3. git add .
  4. git push origin master

但是有一个问题:在更新本地仓库之前我无法推送新的更改。如果我更新我的存储库,它将返回以前的开发人员删除的所有文件。

如何在不从 git pull 数据的情况下推送当前版本?

最佳答案

你可以做一个强制推送。

git push -f origin branch_name

强制推送将清除远程仓库分支的所有提交历史,并将其替换为您的分支。

在“How do I properly force a Git push?”中检查强制推送的答案。如“Git: How to ignore fast forward and revert origin [branch] to earlier commit?”中所述,强制推送可能会产生意想不到的后果,因此请检查一下。

在您的案例中,强制推送将是一种不正确的推送方式,因为您已经在 GitHub 上提交了之前的内容,并且这将清除之前提交的提交历史记录。

因此,要保留您的提交历史记录,您可以执行以下操作:

从git仓库中删除所有文件,然后在这里添加新文件,然后提交更新的文件:

git rm -rf .
cp -r path/to/updated/code/* .
git add .

现在执行 git status 将告诉您其他开发人员修改了哪些文件,而 git diff 将显示有哪些修改。

如果一个文件没有改变,那么git rmgit add会相互抵消。

那些开发人员删除的文件仍然被删除,因为你为他们运行了 git rm 但没有运行 git add

一旦您确信这些确实是更改,您就可以使用

git commit -m "Merged new code"

潜在陷阱:

  1. 只有文件模式发生了变化 (755 <=> 644) - 取决于其他开发人员发送给您的代码。
  2. 您将丢失带有 git rm -rf . 的 .gitignore 文件(以及类似的 .gitattributes 和其他此类文件)。在提交之前使用 git reset HEAD .gitignore 为每个此类文件重置 HEAD。
  3. 不同的行终止字符(以防使用不同的开发环境),因此请适当检查它们。

关于git - 如何在不 pull 的情况下将更改推送到github,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19303962/

相关文章:

javascript - 以编程方式在 GitHub 上查找库的 'main' javascript 文件

git - 如何通过 github rest api 将子模块更新为指定的提交?

windows - Git 子树添加在项目 .gitignore 文件上失败(使用 Windows)

git - 即使在 git add 之后,更改也不会提交

git - 压缩数百个原始提交

git - 什么是自托管 git 存储库的好 git 服务器前端

推送分支时的 Github pull 请求链接

github - 如何在 GitHub 上的 readme.md 中获取彩色关键字标签?

git - 如果 diff'ing 不在存储库中,则没有选项可以忽略文件模式吗?

linux - 如果我们想在版本化的源代码中搜索,使用 git grep 比使用普通 grep 更好吗?