git删除某次提交(某个commit)的方法

例如我的提交历史如下

commit 58211e7a5da5e74171e90d8b90b2f00881a48d3a
Author: test 
Date:   Fri Sep 22 20:55:38 2017 +0800
    add d.txt
commit 0fb295fe0e0276f0c81df61c4fd853b7a000bb5c
Author: test 
Date:   Fri Sep 22 20:32:45 2017 +0800
    add c.txt
commit 7753f40d892a8e0d14176a42f6e12ae0179a3210
Author: test 
Date:   Fri Sep 22 20:31:39 2017 +0800
    init

假如要删除备注为add c.txtcommit为0fb295fe0e0276f0c81df61c4fd853b7a000bb5c的这次提交

  1. 首先找到此次提交之前的一次提交的commit7753f40d892a8e0d14176a42f6e12ae0179a3210
  2. 执行如下命令
    git rebase -i  7753f40
    弹出如下界面
    ```
  3. 0fb295f这一行前面的pick改为drop,然后按照提示保存退出
  4. 至此已经删除了指定的commit,可以使用git log查看下

https://zm10.sm-tc.cn/?src=l4uLj4zF0NCIiIjRzMmRitGckJLQj5CMi9DNyMo%3D&uid=795f1af4fd3eaa5ef91c5882bddbe215&hid=f358bbb5ca80da6db643212ec30bad5d&pos=2&cid=9&time=1537315867584&from=click&restype=1&pagetype=0000004000000402&bu=ss_doc&query=git+%E5%88%A0%E9%99%A4%E6%9C%80%E8%BF%91commit&mode=&v=1&uc_param_str=dnntnwvepffrgibijbprsvdsdichei

 

起因: 不小新把记录了公司服务器IP,账号,密码的文件提交到了git
方法:
    git reset --hard
    git push origin HEAD --force

其他:

    根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:
    git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
    git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
    git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容

    HEAD 最近一个提交
    HEAD^ 上一次
     每次commit的SHA1值. 可以用git log 看到,也可以在页面上commit标签页里找到.
commit合并:
http://www.douban.com/note/318248317/

 

 

 

总结:

cmds = ["git checkout -- .", "git clean -fd", "git pull"]

retcode, stdout, stderr = self.cmd.subprocess_popen(
                cmd.split(" "), cwd=git_repo)

cwd设置工作目录

git checkout -- .  点表示当前目录,git checkout -- file则为具体文件

删除 一些 没有 git add 的 文件;

git clean 参数

    -n 显示 将要 删除的 文件 和  目录

     -f 删除 文件,-df 删除 文件 和 目录

git clean -n

git clean -df

git clean -f

你可能感兴趣的:(git)