git使用指南

git使用指南

原文链接:

1. git教程-廖雪峰官网:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
2. github设置添加SSH:http://www.cnblogs.com/ayseeing/p/3572582.html

工作区(本地)文件修改、添加到远程仓(origin):

//查看日志
$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

//过去版本
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed

//未来版本
$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

//git reflog用来记录你的每一次命令
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

//把暂存区的修改撤销掉(unstage),重新放回工作区(本地):
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt

//还记得如何丢弃工作区(本地)的修改吗?
$ git checkout -- readme.txt
$ git status
# On branch master
nothing to commit (working directory clean)

//$ git log 出现冒号":"
你可以上下滚动浏览日志。
屏幕底部出现的冒号":",表示还有更多信息等待输出。
(按"j"向下浏览,"k"向上浏览,"q"退出)。

//确认从版本库删除文件
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt

//在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件。
这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

//第一次添加到远程仓库(origin)
$ git remote add origin https://github.com/cxying93/01-GitRepository.git
$ git push -u origin master
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master

//Git支持多种协议,默认的git://使用ssh
$ git clone git@github.com:cxying93/01-GitRepository.git

//HEAD指向的就是当前分支(master),master指向最新的提交。

分支管理、解决冲突:

//首先,我们创建dev分支,然后切换到dev分支:
$ git checkout -b dev
Switched to a new branch 'dev'

//然后,用git branch命令查看当前分支:
$ git branch
* dev
master

//现在,dev分支的工作完成,我们就可以切换回master分支:
$ git checkout master
Switched to branch 'master'

//现在,我们把dev分支的工作成果合并到master分支上:
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

//合并完成后,就可以放心地删除dev分支了:
$ git branch -d dev
Deleted branch dev (was fec145a).

//小结,Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>

//解决冲突后,查看分支的合并情况:
$ git log --graph --pretty=oneline --abbrev-commit
* 59bc1cb conflict fixed
|
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test

//分支内容添加到远程仓库
$ git push origin master
$ git push origin dev:dev

//分支管理策略:通常合并分支时,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息,所以要强制禁用Fast forward模式:
$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
//合并后,我们用git log看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
* 7825a50 merge with no-ff
|
| * 6224937 add merge
|/
* 59bc1cb conflict fixed