如何在不拉取的情况下将更改推送到 github

  • 本文关键字:github 情况下 git github
  • 更新时间 :
  • 英文 :


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

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

我做了什么:

  1. git init
  2. git remote add origin
  3. git add .
  4. git push origin master

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

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

您可以执行强制推送。

git push -f origin branch_name

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

在"如何正确强制 Git 推送?强制推送可能会产生意想不到的后果,如"Git:如何忽略快进并将源 [分支] 恢复到较早的提交?"中所述,因此请检查相同的内容。

强制推送将是在您的情况下推送内容的错误方式,因为您已经在 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. 不同的
  4. 行终止字符(如果使用不同的开发环境(,因此请适当检查它们。

似乎其他人在版本控制之外处理您的项目,即裸文件和文件夹。

我建议您克隆存储库,复制(并因此用新内容替换(克隆的内容,提交并推送这些更改。

您正在使用的git init等的当前命令会创建全新的存储库,这不是您想要的。

场景

就我而言,场景是我有一个分支feature1,我在其上进行提交,并在测试后将它们合并到 master。

但是有一天,我犯了一个错误,没有对feature1的变化进行太多测试,我合并了代码以掌握。然后我的队友注意到有一个错误。但是那天没有时间解决它,但master分支需要有工作代码。

进行 Git 重置

我在当地做了一个git log,复制了我知道工作正常的提交commit id。然后通过git reset --hard <commit id>进行了重置.

这样我们回到了正在工作的提交。但是当我们试图git push origin master这个提交时,git 说先做一个git pull。但是如果我们这样做,那么我们将再次转到具有该错误的最新提交

解决方案 - 强制推

我们不是简单地git push origin master,而是做了

git push --force origin <commit id>:master

警告:强制推送会删除所有高于强制推送提交的提交历史记录,并将此提交置于顶部。谨慎使用强制推送

要了解有关某些问题的解决方案的更多信息,您可以深入研究:

  1. git push --force以及如何处理它
  2. 提交 ID 从何而来
  3. 不要混淆合并和变基

TIP:在提交时,提交有意义的信息,说明您在该提交中做了什么。它确实有帮助。

纳马斯特🙏

相关内容

最新更新