如何在Git中丢弃本地提交?

Dan*_*ral 248 git git-reset

我一直在做一些事情,并决定完全搞砸了......在完成了一些事情之后.所以我尝试了以下顺序:

git reset --hard
git rebase origin
git fetch
git pull
git checkout
Run Code Online (Sandbox Code Playgroud)

在那时我得到了消息

Your branch is ahead of 'origin/master' by 2 commits.
Run Code Online (Sandbox Code Playgroud)

我想丢弃我的本地提交,而不必删除我的本地目录并重新下载所有内容.我怎么能做到这一点?

mip*_*adi 539

git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

将删除所有在承诺不会origin/master在那里origin是回购协议名称,master是该分支的名称.

  • mipadi:更正确地说,它会将当前分支重置为指向与origin/master相同的提交. (8认同)

sle*_*man 30

顺便说一下,除了mipadi的答案(顺便说一下应该是这样),你应该知道:

git branch -D master
git checkout master
Run Code Online (Sandbox Code Playgroud)

也没有你想要的东西having to redownload everything(你的报价转述).这是因为您的本地仓库包含远程仓库的副本(并且该副本与您的本地目录不同,它与您签出的分支甚至不同).

擦除分支是非常安全的,并且重建该分支非常快并且不涉及网络流量.请记住,git主要是设计的本地回购.即使是远程分支机构也有本地副本.只有一些元数据告诉git特定的本地副本实际上是一个远程分支.在git中,所有文件都在您的硬盘上.

如果您没有主人以外的任何分支机构,您应该:

git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp
Run Code Online (Sandbox Code Playgroud)

  • 但是,这如何区分来自本地提交的提交?事实上,它告诉我"无法删除你当前所在的分支'主人'." (4认同)
  • 2.当然,您无法删除当前签出的分支.要删除master,请先检查另一个分支.如果没有其他分支只是创建一个临时的:`git checkout -b temp; git branch -D master; git checkout master; git branch -D temp` (2认同)

小智 15

我所做的就是努力重置HEAD.这将消除所有本地提交:

git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)