我想知道如何删除提交.
通过delete,我的意思是,如果我没有做那个承诺,当我将来做一推,我所做的更改不会推到远程分支.
我读了git help,我认为我应该使用的命令是git reset --hard HEAD.它是否正确?
当我使用我的源代码工作时,我做了我惯常的事情提交,然后我推送到远程存储库.但后来我注意到我忘了在源代码中组织我的导入.所以我做了修改命令来替换以前的提交:
> git commit --amend
Run Code Online (Sandbox Code Playgroud)
不幸的是,提交不能被推回到存储库.这被拒绝了:
> git push origin
To //my.remote.repo.com/stuff.git/
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to '//my.remote.repo.com/stuff.git/'
Run Code Online (Sandbox Code Playgroud)
我该怎么办?(我可以访问远程存储库.)
我今天最终得到了一个独立的头,同样的问题如下所述:git push说一切都是最新的,即使我有本地更改
据我所知,我没有做任何与众不同的事情,只是从我当地的回购中提交和推送.
那我怎么最终得到一个detached HEAD?
我试图了解它们之间的区别
git push -f
Run Code Online (Sandbox Code Playgroud)
和
git push --force-with-lease
Run Code Online (Sandbox Code Playgroud)
我的猜测是,如果遥控器没有本地分支没有的提交,后者只会推送到遥控器?
如果有更好的方式来表达问题,lmk,但希望它很清楚.
我最初尝试推送我的(第一次!)git repo:
$ git push helloworld
Run Code Online (Sandbox Code Playgroud)
但我得到了回报:
To git-smichaels@free5.projectlocker.com:helloworld.git
! [rejected] HEAD -> master (non-fast forward) error:
failed to push some refs to 'git-smichaels@free5.projectlocker.com:helloworld
git'
Run Code Online (Sandbox Code Playgroud)
所以我找到了另一个关于"修改提交"的StackOverflow问题,并从那里尝试了一个建议而不知道它是否会对我有所帮助:
KaiserSosa@SMICHAELS /c/test/helloworld (master)
$ git push helloworld +master:master
Run Code Online (Sandbox Code Playgroud)
有效!
但我不知道为什么它解决了我的问题:(
有人可以解释为什么这有效,但" git push helloworld"不是吗?
我在git repo中提交了一个提交,并推送了它,但是不小心它包含了我们生产机器的一些密码。所以我删除了提交:
git reset --hard HEAD~1
git push --force
Run Code Online (Sandbox Code Playgroud)
确实确实从提交列表中删除了提交,但是gitlab上的提交网址仍然显示了提交的来源。
我不确定这是git仍将提交内容保存在gitlab服务器上,还是gitlab数据库以某种方式存储提交内容,但是我确实需要从gitlab服务器中完全删除该提交。
有谁知道从gitlab完全删除提交及其内容的方法吗?
我是git的新手,并试图围绕分支的工作方式.根据文档git checkout
更新工作树中的文件以匹配索引或指定树中的版本.如果>没有给出路径,git checkout也会更新HEAD以将指定的分支设置为>当前分支.
所以据我所知,我工作的目录中的文件(我执行git init的文件)应该根据我所在的分支进行更改.我很困惑,因为当我在分支之间切换时不会发生这种情况.在切换分支之前我正在编辑的编辑存在于我切换到的分支中.我做错了什么或git checkout不能这样工作,我只是误解了文档?
如何在github.com托管的git远程上删除提交?我已经在SO上找到了多个答案,展示了如何从分支的提交历史中删除提交.我尝试了这些,但是我的提交仍然清晰可用,因为我可以使用其哈希直接浏览它.
所以为了清楚起见,我的问题不是如何从我的遥控器上所有分支的提交历史中删除提交.我的问题是如何删除提交本身,以便在我之前推送我的分支的git遥控器上没有它的记录.
我试过的解决方案包括:
编辑: Git:从远程分支永久删除一些提交是另一个不适合我的解决方案.这个特定解决方案不起作用的原因是因为它保持"git push - 强制你修改的本地分支到远程.",它不会从远程删除提交,而只是从当前的提交历史中删除它们科.
我完成了一个需要我使用 api_key 的 android 项目。我在 build.gradle 文件中添加了 api 密钥,如下所示:
buildTypes.each {
it.buildConfigField "String", "MDB_API_KEY", "\"243248324293938243\""
}
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,这是一个随机数)
现在我完成了项目,我需要将其上传到 Github,以进行代码审查。在这样做之前,我被要求删除 api 密钥,我做到了
buildTypes.each {
it.buildConfigField "String", "MDB_API_KEY", *putYaOwnApiKeyBrothar*
}
Run Code Online (Sandbox Code Playgroud)
并承诺。
但是如果我将所有内容都推送到 Github,他们可以访问任何较旧的提交,并检索我的 api_key。
我见过类似的问题,解决方案似乎是 git filter-branch,但它似乎删除了整个提交历史记录中的特定文件。我只想删除密钥(或该行,就此而言),因为我希望 *putYaOwnApiKeyBrothar* 代码在我的所有提交中可用。(以防他们必须检查旧的)。
这甚至可能吗?有没有简单的方法?如果没有,我该怎么办?我傻吗?