Git Learning

早上起来想想今天的topic是什么,昨天研究了一下关于python的话题,今天看到的一篇微博
http://www.codeceo.com/article/600-git.html
大概看了一下,覆盖的内容还是比较少,所以还是自己研究一下git的命令

Git

说起git,其实我已不陌生了,一直在用嘛,以前也在github上面提交代码,作为个人使用的工具,没有什么,但是还没有涉及和别人合作过,大体上说,我用到的也就是git的一部分内容,和SVN一样,但是git更强大,也更复杂,你懂的,什么branch,merge之类,什么cherrypick等等,这些。

1.local git的三种状态

可见一个文件从开始建立,是不被git认识的,如果存在在gitingore匹配里面,那么也不会在提交列表里面。git commit让一个被staging area的文件到git repository, git commit -a可以简化此步骤,如果一个文件以前被跟踪过。
2. git reset
其实是移动git的head指针,它有三个参数,hard,soft和mix,reset hard比较牛,也比较危险,它把所有git HEAD指针移动之后,让所有处于HEAD指针之后的修改都被抛弃了,有的时候比较有风险,毕竟丢失文件。soft和mix都不会让以后的文件失效,不同的是soft把所有已经提交过的文件放到stage area,而mix把所有文件放到了working directory.如果在恢复到以前的状态上,reset soft可以在之后简单的执行git commit,但是mix需要先add到stage area里面。
BTW,这里HEAD可以帮助我们定位git log中的位置,HEAD^ === HEAD~1 表示HEAD的上一次提交,或者你可以输入那串常常的SHA-1码。
3. git revert。
revert操作比较有风险,而且涉及冲突,如果一次提交之后文件又被修改,这是revert上一次提交,只是对文件回滚一次提交,这个可能需要处理冲突。
4. reflog & cherry-pick
git恢复操作的终极大法,因为git是snapshot存储的,并且是全部的提交存储,所以不容易丢失文件,在reflog里面可以看到具体的文件操作,包括reset,这可以帮助我们恢复文件,thanks god.

缓口气把git说完,其实git复杂在你不仅仅需要本地git,恩,还需要远程的和别人交互啊喔喂,SVN没办法,所有的都需要放到中央机上,git让你本地有一番天地,但是远程同时也需要。
说起来到远程就是一条叫,git push and fetch,前面的把本地的commit提交到远程,后面的把远程的修改拿到本地,需要说明的是git有一个pull,这个其实就是在fetch后面有进行了一步merge。
1.branch操作

git branch testing
git checkout testing
git branch -b testing # equals operations front two 
git branch -d testing
git branch -D testing # use for not merging branch

2.Remote branch

git push origin testing:testing # push remote branch
git push origin  :testing # delete remote branch instead of empty

3.merge and rebase
衍合的概念是不形成分支,而是在上面重演操作。 这也可以理解,pull --rebase操作为了不和远程机器上进行merge操作。

posted @ 2015-02-06 14:26  一途  阅读(265)  评论(0编辑  收藏  举报