标签: git-reset

撤消已被推送到远程仓库的Git中的特定提交

撤消特定提交的最简单方法是:

  • 不在脑袋或头部
  • 已被推到遥控器.

因为如果它不是最新的提交,

git reset HEAD
Run Code Online (Sandbox Code Playgroud)

不起作用.而且因为它被推到了遥远的地方,

git rebase -i
Run Code Online (Sandbox Code Playgroud)

git rebase --onto
Run Code Online (Sandbox Code Playgroud)

将导致遥控器出现一些问题.

更重要的是,我不想真正修改历史.如果有错误的代码,它就在历史中可以看到.我只想在工作副本中使用它,我不介意反向合并提交.

换句话说,以下svn命令的Git等价物是什么:

svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
Run Code Online (Sandbox Code Playgroud)

通过反向合并这些修订中的所有更改,将所有更改从295移除到302,作为新提交.

svn merge -c -302 ^/trunk
Run Code Online (Sandbox Code Playgroud)

当然,通过添加另一个反向合并来自相应提交的更改的提交来撤消302提交.

我认为它应该是一个相当简单的Git操作和一个相当常见的用例.原子提交还有什么意义?

我们已经举办藏起来,并要保证的提交是完全原子,你不应该能够很容易地撤销这些原子提交的一个或多个?

git version-control git-revert git-reset

743
推荐指数
4
解决办法
31万
查看次数

如何取消本地git提交

我的问题是我已经更改了一个文件,例如:README,为我的测试行添加了一行新的'并保存了该文件,然后我发出了以下命令

 git status

 # On branch master
 # Changed but not updated:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working directory)
 #
 #  modified:   README
 #
 no changes added to commit (use "git add" and/or "git commit -a")


 git add README

 git commit -a -m 'To add new line to readme'
Run Code Online (Sandbox Code Playgroud)

我没有将代码推送到github,现在我想取消这个提交.

为此我用过

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

但是我从README文件中丢失了新添加的" 这个用于我的测试行 ".这不应该发生.我需要内容.有没有办法保留内容并取消我的本地提交?

git git-reset git-commit

696
推荐指数
6
解决办法
73万
查看次数

"git reset"和"git checkout"有什么区别?

我一直在想,git reset并且git checkout同样地,在这个意义上,两者都将项目带回特定的提交.但是,我觉得它们不可能完全相同,因为这将是多余的.这两者之间的实际差异是什么?我有点困惑,因为svn只svn co需要恢复提交.

添加

下面的图解释了差别,尽管在一个或者可能过于简化的或不正确的方式进行.你怎么看?是错误还是过度简化?

http://a.imageshack.us/img192/5440/screenshot20100903at416.png

增加2

VonC和Charles解释了两者之间的差异,git reset并且git checkout非常好.我目前的理解是git reset将所有更改还原为特定提交,而git checkout更多或更少的准备分支.我发现以下两个图对于理解这些图非常有用:

http://a.imageshack.us/img651/1559/86421927.png http://a.imageshack.us/img801/1986/resetr.png

增加3

http://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html,checkout和reset可以模拟反叛.

在此输入图像描述

git checkout bar 
git reset --hard newbar 
git branch -d newbar 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

git git-checkout git-reset

415
推荐指数
5
解决办法
11万
查看次数

Git:无法撤消本地更改(错误:路径...已取消合并)

我有以下工作树状态

$ git status foo/bar.txt
# On branch master
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       deleted by us:      foo/bar.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)

文件foo/bar.txt在那里,我想再次进入"未更改状态"(类似于'svn revert'):

$ git checkout HEAD foo/bar.txt
error: path 'foo/bar.txt' is unmerged
$ git reset HEAD foo/bar.txt
Unstaged changes after reset:
M       foo/bar.txt
Run Code Online (Sandbox Code Playgroud)

现在它变得令人困惑:

$ git status foo/bar.txt
# …
Run Code Online (Sandbox Code Playgroud)

git git-checkout git-reset

315
推荐指数
5
解决办法
18万
查看次数

在git中最后一次提交后重置所有更改

如何撤消上次提交后对目录所做的每次更改,包括删除添加的文件,重置已修改的文件以及添加已删除的文件?

git git-revert git-reset git-commit

305
推荐指数
2
解决办法
14万
查看次数

Git Revert,Checkout和Reset之间有什么区别?

我想了解如何重新恢复或回滚文件和项目到以前的状态,不明白之间的差别git revert,checkoutreset.为什么有3个不同的命令看似相同的目的,何时有人选择一个而不是另一个?

git git-revert git-checkout git-reset

251
推荐指数
7
解决办法
8万
查看次数

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

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

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)

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

git git-reset

248
推荐指数
3
解决办法
16万
查看次数

git reset --hard之后没有暂停的更改

标题说明了一切.

之后git reset --hard,git status给我Changes not staged for commit:部分内的文件.

我也尝试了git reset .,git checkout -- .并且git checkout-index -f -a无济于事.

那么,我怎样才能摆脱那些未分阶段的变化呢?

这似乎只打击Visual Studio项目文件.奇怪的.请参阅此粘贴:http://pastebin.com/eFZwPn9Z.这些文件的特殊之处在于.gitattributes我有:

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf
Run Code Online (Sandbox Code Playgroud)

此外,autocrlf在我的全局中设置为false .gitconfig.这可能是某种相关的吗?

git git-reset

248
推荐指数
12
解决办法
12万
查看次数

Git,如何将origin/master重置为提交?

我通过此命令将本地主服务器重置为提交:

git reset --hard e3f1e37
Run Code Online (Sandbox Code Playgroud)

当我输入$ git status命令时,终端说:

# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.

#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)

由于我也要重置原点/标题,我结帐到origin/master:

$ git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without …
Run Code Online (Sandbox Code Playgroud)

git git-checkout git-reset

223
推荐指数
3
解决办法
21万
查看次数

如何撤消git中的最后一次提交

错误地,我做了git add .并且git commitdevelop分支机构.但幸运的是,我没有这样做git push.

所以我想把它恢复到原始状态.

我试过了git reset --soft,git reset HEAD --hard但看起来我搞砸了.

我该如何解决?我想回到原始状态并可能保持代码更改.

git git-revert git-reset git-commit

198
推荐指数
2
解决办法
20万
查看次数