前段时间学习了廖雪峰老师的Python教程,学完后准备跟着一起做实战,发现第一步便是使用GitHub。注册是挺久了,由于项目中用的都是SVN,也没去了解Git和GitHub的使用,趁这个机会记录下Git学习的入门知识点。学习地址,Git教程,Python教程。
试着输入git
,看看系统有没有安装Git,如果没有安装:
Debian或Ubuntu Linux:
sudo apt-get install git
老一点的Debian或Ubuntu Linux,命令改为:
sudo apt-get install git-core
其他Linux版本,可直接通过源码安装。官网下载–>解压–>依次输入:./config
,make
,sudo make install
这几个安装命令
直接从官网下载安装程序,然后默认选项安装即可;
安装完成后,需要设置:
git config –global user.name “
Your Name
”
git config –global user.email “[email protected]
”
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
git init
把目录变成Git可以管理的仓库;(文件夹下会多了一个.git的隐藏文件)git add
,注意,可反复多次使用,添加多个文件;git commit -m ""
,完成。
git status
查看工作区状态;
git diff
查看修改内容;
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令:
根据提交版本号回退:
git reset --hard commit_id
提交到上一个版本:git reset --hard HEAD^
提交往前100个版本:git reset --hard HEAD~100
穿梭前,用git log --pretty=oneline
可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。
git add
是先把工作区的所有修改放到暂存区;
git commit
是把暂存区的所有分支提交到分支,之后暂存区就没有任何内容了;
对同一个文件进行多次修改提交两种方式:
1. 第一次修改–>第二次修改–>git add
–>git commit
2. 第一次修改–>git add
–>第二次修改–>git add
–>git commit
git checkout -- file
可以还原;git reset HEAD file
,然后操作步骤1;git rm file
删除本地文件,并且git commit
就会删掉版本库;git checkout -- file
恢复(只能恢复最新的,本地的修改都不会被恢复);创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "[email protected]"
其中,id_rsa
是私钥,id_rsa.pub
是公钥;
登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容;
登陆GitHub找到Create a new repo
,在Repository name
填入learngit
,其他保持默认设置,点击Create repository
按钮,就成功地创建了一个新的Git仓库;
根据GitHub的提示,在本地的learngit
仓库下运行命令:
远程库的名字默认叫做
origin
git remote add origin [email protected]:michaelliao/learngit.git
把本地库的所有内容推送到远程库上:
git push -u origin master
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令:
把本地master分支的最新修改推送至GitHub
git push origin master
git clone [email protected]:michaelliao/gitskills.git
Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快
创建并切换到dev
分支:
git checkout -b dev
相当于:
git branch dev
创建
git checkout dev
切换
查看当前分支:
git branch
切换master
分支:
git checkout master
合并dev
上的代码到master
上:
git merge dev
删除dev
分支:
git branch -d dev
当git merge feature1
命令展示冲突信息,需要手动去合并冲突信息;
合并后再git add
,git commit
;
查看分支合并情况:
git log --graph --pretty=oneline --abbrev-commit
合并分支使用:
git merge --no-ff -m "merge with no-ff" dev
若当前在dev
分支上开发,但是需要修复master
上的缺陷,那么需要:
储藏当前开发现场:
git stash
切换
master
分支:
git checkout master
创建bug-101
分支:
git checkout -b bug-101
修复完成后切回master
,合并bug-101
,最后并删除bug-101
分支:
git checkout master
git merge --no-ff -m "fixed bug-101" bug-101
git branch -d bug-101
切回dev
开发并查看前面保存的现场:
git checkout dev
git stash list
恢复现场:
方式1:恢复和删除分开(当然也可以不删除stash)
git stash apply
git stash drop
方式2:恢复的同时删除stash
git stash pop
可以多次stash
,恢复的时候,先用git stash list
查看,然后恢复指定的stash
,用命令:
git stash apply stash@{0}
如果要丢弃一个没有被合并过的分支,可以强行删除:
git branch -D
查看远程库的信息:
git remote
或展示更详细信息:
git remote -v
推送本地分支到远程库:
git push origin master
git push origin dev
分支是否推送:
master分支
是主分支,因此要时刻与远程同步;dev分支
是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支
只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支
是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
抓取分支:
克隆目录:
git clone [email protected]:michaelliao/learngit.git
创建目录:
git checkout -b dev origin/dev
推送目录:
git push origin dev
若有冲突,拉取到本地解决冲突再推送:
git pull
若git pull
也失败了,原因是没有指定本地dev分支
与远程origin/dev分支
的链接,根据提示,设置dev
和origin/dev
的链接:
git branch --set-upstream dev origin/dev
小结:
查看远程库信息,使用git remote -v
;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
;
从远程抓取分支,使用git pull
,如果有冲突,要先处理冲突。
切换到分支:
git checkout master
给分支打上标签:
git tag v1.0
查看所有标签:
按照字面排序,非时间排序
git tag
给之前提交的版本打分支:
第一步,先找到提交的版本号:
git log --pretty=oneline --abbrev-commit
第二步,指定版本号打上标签:
git tag v0.9 6224937
查看标签信息:
git show
创建带有说明的标签:
用
-a
指定标签名,-m
指定说明文字
git tag -a v0.1 -m "version 0.1 released" 3628164
删除标签:
git tag -d v0.1
推送标签到远程:
git push origin
一次性推送全部尚未推送到远程的本地标签:
git push origin --tags
删除已推送远程标签:
第一步,删除本地:
git tag -d v0.9
第二步,从远程删除:
git push origin :refs/tags/v0.9
暂不使用,先不记录;
暂不使用,先不记录;
Git Cheat Sheet