V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
for8ever
V2EX  ›  git

如何取消还没 push 的 commit ?

  •  1
     
  •   for8ever · 2014-08-27 18:32:20 +08:00 · 8498 次点击
    这是一个创建于 3742 天前的主题,其中的信息可能已经有所发展或是发生改变。
    17 条回复    2014-08-29 16:52:23 +08:00
    yinheli
        1
    yinheli  
       2014-08-27 18:38:03 +08:00
    reset
    kookxiang
        2
    kookxiang  
       2014-08-27 18:40:50 +08:00
    可以reset退版本,也可以强制pull
    poke707
        3
    poke707  
       2014-08-27 18:59:45 +08:00
    若进一步取消代码改动可以加reset 的hard模式,
    若只是想更改上次commit本身可以用commit的amend参数
    aa65535
        4
    aa65535  
       2014-08-27 19:09:05 +08:00   ❤️ 1
    取消最后一次提交: git reset --soft HEAD~1 后面数字可以看作是取消的 commit 次数。
    --soft 参数表上只取消 commit 但保留文件的修改(相当于git add 之后的的状态),如果你想连修改都不要的话就用 --hard 参数。
    slixurd
        5
    slixurd  
       2014-08-27 19:09:48 +08:00
    我一直都是用git stash
    还能保证不会丢失修改之后的数据= =,防作死必备
    bombless
        6
    bombless  
       2014-08-27 19:36:24 +08:00
    git stash+1
    witcher42
        7
    witcher42  
       2014-08-27 19:50:47 +08:00
    zhibin
        8
    zhibin  
       2014-08-27 21:01:29 +08:00
    git stash 只会保存未提交的修改。如果你已经 commit 了但是还没push ,stash 是没什么用的。

    如果你在 branch-a 上工作(如果没有就新建一个),你可以 git checkout -b new-branch,在 new-branch 上回退到上次提交之前(或者直接 checkout 到上次提交之前-b new-branch)。

    多用 branch 和 stash ,基本上不会有丢失数据的情况。
    SunLn
        9
    SunLn  
       2014-08-27 21:03:33 +08:00
    git log
    看到某个commit的hash后

    git reset --hard hash
    Julyyq
        10
    Julyyq  
       2014-08-27 22:09:53 +08:00
    取消上一次commit: git reset HEAD^
    TankyWoo
        11
    TankyWoo  
       2014-08-27 22:11:36 +08:00
    git status 不是有提示吗?楼主没看?
    billlee
        12
    billlee  
       2014-08-28 00:55:07 +08:00
    1) 取消上一次 commit: git reset HEAD^ # 会保留在 stage
    2) 取消上一次 commit: git reset --hard HEAD^ # 完全丢弃
    3) 修改上一次的 commit:
    git add something
    git commit --amend
    4) 取消倒数第三、第二个 commit: git rebase -i HEAD~3, 然后在编辑器中删除第一行和第二行后,保存退出。
    5) 修改倒数第三个 commit: git rebase -i HEAD~3, 然后把第一行的 pick 改成 edit.
    6) 合并倒数第三、第二个 commit: git rebase -i HEAD~3, 然后把第二行 pick 改成 squash 或 fixup

    git rebase --interactive 特别强大,几乎可以实现所有修改历史的需求。
    kimmykuang
        13
    kimmykuang  
       2014-08-28 09:54:22 +08:00
    看需要,git reset --soft/--hard HEAD^n,n表示回退几个commit
    billlee
        14
    billlee  
       2014-08-28 10:29:14 +08:00
    @kimmykuang 回退多个 commits 是 HEAD~n 吧
    for8ever
        15
    for8ever  
    OP
       2014-08-28 10:35:02 +08:00
    谢谢各位,已经解决了,git log 查找到那个 commit 的 hash ,然后 git reset --hard hash 回退到那个 commit 之前的版本,再 git pull 就 OK 了。
    goodxxx
        16
    goodxxx  
       2014-08-28 17:05:31 +08:00
    good.
    julyclyde
        17
    julyclyde  
       2014-08-29 16:52:23 +08:00
    checkout到旧的commit作为HEAD就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1581 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:47 · PVG 00:47 · LAX 08:47 · JFK 11:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.