我一直在做某件事情,但后来发现它完全搞砸了......在提交了其中一部分之后。因此,我尝试了以下步骤:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
在哪个时刻我收到了这条消息
Your branch is ahead of 'origin/master' by 2 commits.
我想放弃我的本地提交,而不必擦除我的本地目录并重新下载所有东西。我该如何实现这一点?
git reset --hard origin/master
将删除所有不在origin/master
中的提交。其中origin
是仓库名称,master
是分支名称。
origin/master
是指向名为 origin
的远程仓库中 master
分支的引用。 - Matt顺便提一下,除了 mipadi 的答案(顺便说一句,那个答案应该是可行的),你还应该知道这样做:
git branch -D master
git checkout master
你想要的功能可以通过Git轻易实现,而且不必重新下载所有东西(引用你的话进行了简述)。这是因为你的本地仓库包含远程仓库的一份副本(该副本与你的本地目录不同,甚至与你所检出的分支都不同)。
删除一个分支是非常安全的,重建该分支也非常快速,并且不涉及任何网络流量。请记住,Git的设计初衷是主要作为本地仓库使用的。即使是远程分支在本地也有一份副本。只有一点元数据告诉Git指定的本地副本实际上是一个远程分支。在Git中,所有文件始终在您的硬盘驱动器上。
如果您除了主分支没有其他分支,您应该:
git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp
git checkout -b temp; git branch -D master; git checkout master; git branch -D temp
。 - slebetmangit branch -D master
不是必要的,因为它会生成一个错误。 - Alexis Wilke'
是shell语法的一部分,git checkout -b 'temp'
将创建一个名为temp
而不是'temp'
的分支。您可能正在考虑git checkout -b "'temp'"
或git checkout -b '\''temp'\''
。当然,这对于Linux和Mac OS是正确的。正如我所说,我不知道Windows。 - slebetman'temp'
来删除用该命令创建的分支。在Windows上,用双引号来围绕参数是唯一有效的引号。但是这个分支名称不包含空格或其他任何字符,所以无论如何都没有添加引号的必要;你应该在你的回答中将其省略掉。 - Nyerguds我所做的是尝试硬重置到 HEAD。这将清除所有本地提交记录:
git reset --hard HEAD^
^
表示父提交,因此将重置为 HEAD^
将放弃未提交的更改并将分支移动到上一个提交,有效地“删除”最近的提交(尽管提交仍然存在,但分支不再指向它)。答案将只有一个本地提交,其余都是未提交的更改。 @karim @giang - Invariance^
运算符引用提交的父级。因此,如果运行git checkout HEAD^^^
,它将在git图表上“上面”3个提交处检出时间点。 - Shadgit fetch
我曾经见过远程变得不同步并需要更新的情况。如果 reset --hard
或者 branch -D
操作无效,请尝试
git pull origin
git reset --hard
reset --hard
在这种情况下是有效的。 - CharlesBreset --hard
在这里应该有效。然而,我只是想指出它有时无法正确重置分支,而 git pull origin
将重新同步远程并允许 reset --hard
正常工作。 - Jim Clouse我必须做一个:
git checkout -b master
正如Git所说,它不存在了,因为它已经被擦除了。
git -D master
git fetch
和git pull
两个命令 -- pull 命令已经包含了 fetch 和 merge 的操作。 - Ether