我开发了一个由其他开发人员开发的项目。我将我的代码发送给以前的开发人员以更改他们的代码,但他们说他们从未使用过 git,因此他们对项目进行了更改,现在它是实际版本但不受版本控制。
所以,我已经在 github 中提交了,我需要推送这个新版本。
我做了什么:
git 初始化
git remote add origin
git add .
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 rm
和git add
会相互抵消。
那些开发人员删除的文件仍然被删除,因为你为他们运行了 git rm
但没有运行 git add
。
一旦您确信这些确实是更改,您就可以使用
git commit -m "Merged new code"
潜在陷阱:
- 只有文件模式发生了变化 (755 <=> 644) - 取决于其他开发人员发送给您的代码。
- 您将丢失带有
git rm -rf .
的 .gitignore 文件(以及类似的.gitattributes
和其他此类文件)。在提交之前使用git reset HEAD .gitignore
为每个此类文件重置 HEAD。 - 不同的行终止字符(以防使用不同的开发环境),因此请适当检查它们。
关于git - 如何在不 pull 的情况下将更改推送到github,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19303962/