git常用命令(1)(持续更新)

问题描述

当我们修改了很多文件,然后用git add 把所有文件加到当前工作库中,并commit了,随后发现有一个文件不应该被提交,属于误操作,那该怎么办呢?
当我们提交了一个版本,发现这次提交应该被撤回,因为修改的代码还有问题,怎么办?
这些操作需要考虑是否将本地commit push到远程库中,所采取的方法也不同。

git reset

该命令用于提交还没有push到远程库,其用法如下:

git reset paths…
git reset [–soft | –mixed [-N] | –hard ] [-q] [commit]

第一个命令可看做是git add命令的反向操作,即将修改的文件从待提交环境撤销,放到工作环境,但保留文件的修改。
第二个命令可看做是git commit的反向操作,即将已提交到本地库中的版本撤销。它有3中模式(其实是5中,merge和keep模式在这里不做讲解)soft, hard, mixed。常用的是mixed模式,也是缺省模式,即保留文件的修改,只是将Head指向commit版本,依旧可以通过git diff查看该文件修改的地方。hard模式则是将Head指向commit版本,并抛弃本地对该文件的修改,所以本地不再保留所做的修改。soft方式则保留文件和index信息的修改,同时将Head指向commit版本,方便后续再次提交。

git revert

该命令针对的是已将提交push到远程仓库的情况,此时如果用git reset命令,在git pull时会出现各种冲突,最好的方法是通过git revert将某次提交撤销。
当然撤销是一次新的提交,Head不会回退,而是指向新的这次提交,但是它的确将之前的某次提交做了撤销,而且在拉取新内容时不会产生冲突。
但它只会撤销某次提交,并不会撤销某次只有的所有提交。

git rebase

当我们从主分支(比如master分支)创建了一个新分支,并在该分支做新功能开发,并经常将master分支上的提交合并到该新分支,这样新分支的开发可以依赖master分支上新功能。有两种方式实现:

  • git merge
    该方法会产生一个新的commit, 并且该commit有两个父节点,分别指向新分支和主分支;

  • git rebase
    该方法首先会将当前分支中的所有新提交作为补丁(patch)暂存起来,并删除该分支的这些新提交,然后将主分支中的新提交更新到新分支,最后将暂存的补丁重新应用到新分支。如下图所示:
    rebase操作
    C5和C6在mywork分支中不再存在,用新的C5’ 和 C6’代替。

关于git rebase的更多内容,可参考http://gitbook.liuhui998.com/4_2.html一节描述。

git diff

该方法用于查看当前工作区文件的修改情况。默认是查看没有staged的文件修改变化(即没有添加到索引中)。可以通过git add file命令将unstaged文件加入到索引中,随后提交到本地仓库中。

git diff --cached命令可以查看工作区staged文件和上次提交之间的修改区别。有时候我们用git add file添加文件到索引,随后想看看这些文件究竟哪些被修改了,就可以用这个方法了。

git diff HEAD命令可以查看工作目录与上次提交之间的所有区别,包括已经被添加到索引和没有被添加到索引的修改文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值