Git命令使用(二)

git pull、git fetch、git reset、git revert的区别用法


git pull

fetch from a remote repo and try to merge into the current branch.
pull == fetch + merge FETCH_HEAD
git pull会首先执行git fetch,然后执行git merge,把取来的分支的head merge到当前分支.这个merge操作会产生一个新的commit.    
如果使用--rebase参数,它会执行git rebase来取代原来的git merge.

git fetch

download new branches and data from a remote repository.
 可以git fetch [alias]取某一个远程repo,也可以git fetch --all取到全部repo
fetch将会取到所有你本地没有的数据,所有取下来的分支可以被叫做remote branches,它们和本地分支一样(可以看diff,log等,也可以merge到其他分支),但是Git不允许你checkout到它们. 

git reset

reset 根据这个英文单词的意思直译的就是重置,就是还原的意思,在git中也是一样,用来将HEAD指针还原(指向)到某个提交(commit)。他是还原一段的,也就是说,如果这个commit 在log的中间位置,那么这个commit 之后的提交有可能都会消失掉!所以这个命令是蛮危险的。

git reset 命令的使用最多的2种形式是:

git reset commitId 
git reset --hard commitId

不加任何参数 表示是软重置,它会改变本地HEAD的指针, 指向3deb0e4, 并把643a5ee这一步的提交,还原到工作区,我们可以再加工或者其他的操作。所以它是非常安全的。

--hard commitId 强制移动指针到这个分支,会销毁它前面的所有的信息,本地也没有了,是蛮危险的一种行为。

总结下:

如果暂缓区是干净的,可以用 git reset HEAD~ 或者 {id} 还原到上一次 或者 几次前 的修改,加 --hard 强制还原。
如果暂存区有数据没有commit,用git reset HEAD {file} 来移除暂缓区。

git revert

revert 根据这个英文单词的意思直译的就是恢复,撤销。git里面,用来撤销某一次提交(commit) 。他只会撤销这一次提交,无论这个commit在log的哪个位置,不会影响上下的提交。而且他会将撤销的作为一个新的commit提交。

git revert命令就温和的多,它仅仅是移除这个commit,而不是将指针移动到这个分支,所以这个命令常常用来回滚操作。

作者:T&D
Q Q:335749143
邮箱:tanda.arch#gmail.com(@替换#)
出处:http://www.cnblogs.com/one-villager/
* 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/one-villager/p/git_use_2.html