我有一个愚蠢的情况。我开发了一个由另一个开发人员开发的项目。我已将我的资源发送给之前的开发人员,以便对其来源进行更改。但他们说他们从未使用过git。所以他们已经添加了对项目的更改,现在是实际版本。但它不受版本控制代码的限制。
所以我已经在github上提交了,我需要推出这个新版本。
我做了什么:
但这是一个问题,我当然无法在更新本地回购之前推出新的更改。但是,如果我更新我的仓库,它将返回之前开发人员删除的所有文件。
我的问题:如何在不从git中提取数据的情况下推送当前版本。
我知道喜剧情况,但我需要帮助。
由于
答案 0 :(得分:28)
你可以强制推动。
git push -f origin branch_name
强制推送将清除远程存储库分支的所有提交历史记录,并将其替换为您的分支。
检查强制推送here的答案。强制推送可能会出现意外consequences,因此请检查相同内容。
修改强>
强制推送将是一种不正确的推送方法,因为你已经在github上提交过了,这将删除之前提交的提交历史记录。
因此,要保留您的提交历史记录,您可以执行以下操作
从git repository中删除所有文件,然后在此处添加新文件,然后提交更新的文件
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"
。
一旦您确信这些确实是更改,您可以使用
提交git rm -rf .
潜在的陷阱
.gitattributes
(以及类似git reset HEAD .gitignore
和其他此类文件)丢失.gitignore文件。在提交之前使用{{1}}为每个此类文件重置HEAD。答案 1 :(得分:5)
似乎其他人在版本控制之外的项目上工作,即裸文件和文件夹。
我建议您克隆存储库,使用新内容,提交和推送复制(并因此替换)克隆的内容。你正在尝试git init
等创建全新的回购,这不是你想要的。
答案 2 :(得分:0)
场景:
在我的情况下,情况是我有一个分支feature1
,我在该分支上进行提交,并在测试后将其合并为master。
但是有一天,我犯了一个错误,并且没有对feature1
中的更改进行过多测试,因此我将代码合并为master。
然后我的队友注意到有一个错误。但是那天没有时间解决它,但是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
注意:强制推送 删除所有在强制推送提交之上的提交历史记录 ,并将此提交置于顶部。谨慎使用强制推送。
要了解有关某些问题的解决方案的更多信息,请深入研究
提示:提交时,提交有意义的消息,说明您在该提交中所做的事情。确实有帮助。
Namaste?
答案 3 :(得分:-2)
您可以尝试git stash
,它会拍摄工作树的快照。然后你可以从github中提取更改。来自man git stash
:
如果要记录工作目录和索引的当前状态,但想要返回干净的工作目录,请使用git stash。该命令将保存您的本地修改并恢复工作目录以匹配HEAD提交。
所以:
git stash
git pull me@github.com/myrepo.git
git stash apply
git commit -a