git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
for8ever
V2EX  ›  git

如何取消还没 push 的 commit ?

  •  1
     
  •   for8ever · Aug 27, 2014 · 9298 views
    This topic created in 4290 days ago, the information mentioned may be changed or developed.
    17 replies    2014-08-29 16:52:23 +08:00
    yinheli
        1
    yinheli  
       Aug 27, 2014
    reset
    kookxiang
        2
    kookxiang  
       Aug 27, 2014
    可以reset退版本,也可以强制pull
    poke707
        3
    poke707  
       Aug 27, 2014
    若进一步取消代码改动可以加reset 的hard模式,
    若只是想更改上次commit本身可以用commit的amend参数
    aa65535
        4
    aa65535  
       Aug 27, 2014   ❤️ 1
    取消最后一次提交: git reset --soft HEAD~1 后面数字可以看作是取消的 commit 次数。
    --soft 参数表上只取消 commit 但保留文件的修改(相当于git add 之后的的状态),如果你想连修改都不要的话就用 --hard 参数。
    slixurd
        5
    slixurd  
       Aug 27, 2014
    我一直都是用git stash
    还能保证不会丢失修改之后的数据= =,防作死必备
    bombless
        6
    bombless  
       Aug 27, 2014
    git stash+1
    witcher42
        7
    witcher42  
       Aug 27, 2014
    zhibin
        8
    zhibin  
       Aug 27, 2014
    git stash 只会保存未提交的修改。如果你已经 commit 了但是还没push ,stash 是没什么用的。

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

    多用 branch 和 stash ,基本上不会有丢失数据的情况。
    SunLn
        9
    SunLn  
       Aug 27, 2014
    git log
    看到某个commit的hash后

    git reset --hard hash
    Julyyq
        10
    Julyyq  
       Aug 27, 2014
    取消上一次commit: git reset HEAD^
    TankyWoo
        11
    TankyWoo  
       Aug 27, 2014
    git status 不是有提示吗?楼主没看?
    billlee
        12
    billlee  
       Aug 28, 2014
    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  
       Aug 28, 2014
    看需要,git reset --soft/--hard HEAD^n,n表示回退几个commit
    billlee
        14
    billlee  
       Aug 28, 2014
    @kimmykuang 回退多个 commits 是 HEAD~n 吧
    for8ever
        15
    for8ever  
    OP
       Aug 28, 2014
    谢谢各位,已经解决了,git log 查找到那个 commit 的 hash ,然后 git reset --hard hash 回退到那个 commit 之前的版本,再 git pull 就 OK 了。
    goodxxx
        16
    goodxxx  
       Aug 28, 2014
    good.
    julyclyde
        17
    julyclyde  
       Aug 29, 2014
    checkout到旧的commit作为HEAD就行了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   933 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 20:42 · PVG 04:42 · LAX 13:42 · JFK 16:42
    ♥ Do have faith in what you're doing.