由于一些糟糕的挑选,我的本地Git存储库目前在原点之前提交了五个提交,并且状态不佳.我想摆脱所有这些提交并重新开始.
显然,删除我的工作目录并重新克隆会这样做,但是再次从GitHub下载所有内容似乎有些过分,而且不能很好地利用我的时间.
也许git revert是我需要的,但我不希望在原点(甚至六个)之前提交10个提交,即使它确实使代码本身恢复到正确的状态.我只想假装最后半小时从未发生过.
是否有一个简单的命令可以做到这一点?这似乎是一个明显的用例,但我没有找到它的任何例子.
请注意,这个问题具体是关于提交,而不是关于:
Ben*_*son 2258
如果您的超额提交仅对您可见,您可以git reset --hard origin/<branch_name>回到原点所在的位置.
做一个git revert使得新提交删除旧的,保持每个人的历史理智的方式提交.
Ram*_* B. 243
只需删除您的本地主分支并重新创建它,如下所示:
git branch -D master
git checkout origin/master -b master
Run Code Online (Sandbox Code Playgroud)
And*_*rin 187
尝试:
git reset --hard <the sha1 hash>
Run Code Online (Sandbox Code Playgroud)
将头重置到你想要的任何地方.使用gitk查看您想要的提交.你也可以在gitk中重置.
Jam*_* L. 101
删除最近的提交:
git reset --hard HEAD~1
删除最近的提交,而不会破坏您已完成的工作:
git reset --soft HEAD~1
Lah*_*cen 44
您可以使用这个 git 命令
git reset --hard origin/<branch_name>
Run Code Online (Sandbox Code Playgroud)
par*_*ish 36
在您的分支尝试:
git reset --hard origin/<branch_name>
Run Code Online (Sandbox Code Playgroud)
使用" git log"或" git status"因此验证反转(到状态,没有本地提交).
小智 30
简单的解决方案是将本地 master 分支 HEAD 与 origin/master 分支 HEAD 匹配
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
PS:origin/master - 是指向 master 分支的远程指针。你可以用任何分支名称替换 master
小智 21
git reset --hard @{u}*删除当前分支上的所有本地更改,包括提交.我很惊讶没有人发布这个,但考虑到你不必查找承诺恢复或使用分支机构.
*也就是说,重置当前分支在@{upstream}-commonly origin/<branchname>,但并非总是如此
Cod*_*ard 16
在回答之前,让我们添加一些背景知识,解释一下这是什么HEAD。因为下面的一些选项会导致分离头
First of all what is HEAD?HEAD只是对当前分支上的当前提交(最新)的引用。在任何给定时间
只能有一个HEAD。(不包括git worktree)
的内容HEAD存储在里面.git/HEAD,它包含当前提交的 40 字节 SHA-1。
detached HEAD如果您不在最新的提交上——这意味着它HEAD指向历史中的先前提交,它被称为detached HEAD.
在命令行上,它看起来像这样 - SHA-1 而不是分支名称,因为HEAD它没有指向当前分支的尖端

git checkoutgit checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Run Code Online (Sandbox Code Playgroud)
这将签出指向所需提交的新分支。
此命令将检出给定的提交。
此时,您可以创建一个分支并从这一点开始工作。
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
Run Code Online (Sandbox Code Playgroud)
git reflog您也可以随时使用reflog。
git reflog将显示更新HEAD并检出所需的引用日志条目的任何更改将设置HEAD回此提交。
每次修改 HEAD 时都会有一个新条目 reflog
git reflog
git checkout HEAD@{...}
Run Code Online (Sandbox Code Playgroud)
这会让你回到你想要的提交
git reset --hard <commit_id>“移动”你的 HEAD 回到所需的提交。
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Run Code Online (Sandbox Code Playgroud)
git rebase --no-autostash。git revert <sha-1>“撤消”给定的提交或提交范围。
reset 命令将“撤消”在给定提交中所做的任何更改。
带有撤消补丁的新提交将被提交,而原始提交也将保留在历史记录中。
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
Run Code Online (Sandbox Code Playgroud)
这个模式说明了哪个命令做什么。
如您所见,reset && checkout修改HEAD.
Jim*_*123 14
使用任意次数,在不删除您最近创建的任何文件的情况下恢复到上次提交。
git reset --soft HEAD~1
Run Code Online (Sandbox Code Playgroud)
然后使用
git reset HEAD <name-of-file/files*>
Run Code Online (Sandbox Code Playgroud)
取消暂存或取消跟踪。
Nic*_*las 12
要查看/获取您想要返回的提交的SHA-1 ID
gitk --all
Run Code Online (Sandbox Code Playgroud)
回滚到该提交
git reset --hard sha1_id
Run Code Online (Sandbox Code Playgroud)
!注意.在该提交之后进行的所有提交都将被删除(以及对项目的所有修改).因此,首先要将项目克隆到另一个分支或复制到另一个目录.
小智 12
如果您的分支比 ' origin/XXX'领先5 次提交。
您可以发出:
git reset --hard HEAD~5
Run Code Online (Sandbox Code Playgroud)
它应该删除最后 5 次提交。
我有一种情况,我想删除未被推送的提交,但提交是在另一个提交之前.为此,我使用了以下命令
git rebase -i HEAD~2 - >它会改变最后两次提交
我使用'drop'作为我想删除的提交签名.
删除未跟踪的文件(未提交的本地更改)
git clean -df
Run Code Online (Sandbox Code Playgroud)
永久删除所有本地提交并获取最新的远程提交
git reset --hard origin/<branch_name>
Run Code Online (Sandbox Code Playgroud)
对于那些对 Visual Studio 解决方案感兴趣的人,这里是练习:
Team Explorer窗口中,连接到目标存储库。Branches,右键单击感兴趣的分支并选择View history。History窗口中的提交并选择Reset -> Delete changes (--hard)。这将丢弃您的本地提交并将您的存储库状态重置为选定的提交。即您在拉取 repo 后所做的更改将丢失。
找到您想要恢复到的提交的 sha1:
za$ git reflog
... snip ...
cf42fa2... HEAD@{0}: commit: fixed misc bugs
~
~
cf42fa2... HEAD@{84}: commit: fixed params for .....
73b9363... HEAD@{85}: commit: Don't symlink to themes on deployment.
547cc1b... HEAD@{86}: commit: Deploy to effectif.com web server.
1dc3298... HEAD@{87}: commit: Updated the theme.
18c3f51... HEAD@{88}: commit: Verify with Google webmaster tools.
26fbb9c... HEAD@{89}: checkout: moving to effectif
Run Code Online (Sandbox Code Playgroud)
然后使用 --mixed 标志,以便“重置 HEAD 和索引”:
za$ git reset --mixed cf42fa2
Run Code Online (Sandbox Code Playgroud)
可用标志:
za$ git reset -h
-q, --quiet be quiet, only report errors
--mixed reset HEAD and index
--soft reset only HEAD
--hard reset HEAD, index and working tree
--merge reset HEAD, index and working tree
--keep reset HEAD but keep local changes
--recurse-submodules[=<reset>]
control recursive updating of submodules
-p, --patch select hunks interactively
-N, --intent-to-add
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
784564 次 |
| 最近记录: |