我一直在研究某些东西,并在完成其中一部分后决定完全拧紧它。所以我尝试了以下顺序:
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
git rebase origin
git fetch
git pull
git checkout
这时我收到消息
Your branch is ahead of 'origin/master' by 2 commits.
我想放弃本地提交,而不必清除本地目录并重新下载所有内容。我该怎么做?
Answers:
git reset --hard origin/master
将删除所有未提交在origin/master
这里origin
是回购的名字和master
是分支的名称。
origin/master
是跟踪远程仓库的master
分支的分支origin
。
origin/master
是对master
名为的远程分支的引用origin
。
顺便说一句,除了mipadi的答案(应该顺便说一下)之外,您应该知道这样做:
git branch -D master
git checkout master
也完全可以满足您的需求having to redownload everything
(您的报价已释义)。那是因为您的本地存储库包含远程存储库的副本(该副本与您的本地目录不同,甚至与您签出的分支也不相同)。
清除分支非常安全,并且重建该分支的速度非常快,并且不涉及网络流量。请记住,根据设计,git主要是本地存储库。甚至远程分支机构在本地也有副本。只有一点元数据告诉git一个特定的本地副本实际上是一个远程分支。在git中,所有文件一直都在硬盘上。
如果除master之外没有其他分支,则应:
git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp
Cannot delete the branch 'master' which you are currently on.
git checkout -b temp;git branch -D master;git checkout master;git branch -D temp
origin/master
是在本地计算机上。那是远程分支的本地(完整)副本。真正的远程分支是origin master
。
git branch -D master
没有必要,因为如前所述,它会产生错误。
我要做的是尝试重设为HEAD。这将清除所有本地提交:
git reset --hard HEAD^
^
代表父提交,因此重置为HEAD^
丢弃未提交的更改并将分支移至上一个提交,从而有效地“删除”最近的提交(尽管该提交仍然存在,但分支并未指向它)。答案将只有一个本地提交,其余都是未提交的更改。@karim @giang
你需要跑步
git fetch
要获取所有更改,然后您将不会收到“您的分支在前”的消息。
我见过一些实例,其中遥控器变得不同步,需要更新。如果reset --hard
还是branch -D
失败,请尝试
git pull origin
git reset --hard
reset --hard
在这种情况下有效
reset --hard
应该在这里工作。但是,我只是指出,它有时无法正确重置分支,并且git pull origin
将重新同步遥控器并允许reset --hard
正常运行。
git fetch
并且git pull
-pull是获取和合并的组合。