git config --global user.name "Your name"
git config --global user.email "Your email"
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
里面有个.git的目录,这个目录是Git来跟踪管理版本库的,不要改动里面的文件否则改乱了,就把git仓库破坏了。
$ git add readme.txt
$ git commit -m "wrote a readme file"
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao .com>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao .com>
Date: Tue Aug 20 14:53:12 2013 +0800
add distributed
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao .com>
Date: Mon Aug 19 17:51:55 2013 +0800
wrote a readme file
$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
Git中HEAD表示当前版本,上一个版本是HEAD^,上上一个版本是HEAD^^,当版本在前面比较多的时候,可以写成HEAD~100
下面这个命令表示回到上一个版本
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
如果你想回到后来的版本可以使用两种方法,当你的命令行窗口还没有关掉的时候
先找到未来版本号的commit id,比如说3628164…(不用全部写出来,git会自动搜索)
$ 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
我们可以通过历史记录来完成搜索
git checkout -- file
git rm file
git commit -m 'rm file'
在github上新建一个repository,然后git clone
git clone可以克隆https协议的,也可以说是
git clone [email protected]:54BayMax/gitskills.git
GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
ssh-keygen -t rsa -C "[email protected]"
如果顺利的话会在home目录下面产生.ssh文件,里面有id_rsa和id_ras.pub两个文件
2.登录github,在account settings里面SSH Keys页面:点“Add SSH Key”,填上任意title,在文本框里面把id_rsa.pub文件里面的内容给拷贝进去.
3.创建一个新的repository,然后使用如下命令
git remote add origin git@github.com:54BayMax/learngit.git
现在origin这个库就是我们的远程库
4.第一次同步远程
git push -u origin master
使用了-u参数不仅会同步所有的文件还会把本地的master分支和远程的master分支连接起来,用来简化以后的操作
5.以后同步
git push origin master
当两个或者两个以上的分支对同一个文件进行更改的时候,并且各自都添加并且提交的时候,可能会发生冲突,这个时候我们就需要解决冲突。我们应该打开产生冲突的文件,然后进行更改后再提交。这样合并才会完成。
git log –graph命令可以看到分支合并图
通常,分支合并时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,就会丢到分支信息。如果要强制禁用Fast forward模式,git就会在**merge的时候生成一个新的commit
,这样就可以在分至历史上查看分支信息**。
master是非常稳定的,一般用来发布大版本。我们在dev分支上干活,dev分支是不稳定的,到某个时候,比如1.0版本发布的时候,再把dev分支合并到master分支上,在master分支发布1.0版本。你和你的小伙伴每个人都在dev分支上干活,每个人都有自己的分支,时不时的往dev分支上合并就好了。合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
假设我们我们需要修复一个bug,bug代码issue-101,那么我们需要做的首先是创建一个分支,用这个临时分支去修复代码。那么假如我们现在的分支上的任务还没有结束怎么办?
可以使用git stash这个命令,把工作现场保存
$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge
等我们回来后可以通过git stash list来看工作现场
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
恢复工作现场有以下两个方法:
1. git stash pop,恢复的同时把stash的内容也删了
2. git stash apply恢复,但是stash的内容并不会删除,需要git stash drop来删除
git stash apply stash@{0}
对于新特性,我们最好需要建立一个feature分支,写完后合并到dev分支。如果没用了可以通过git branch -D feature强行删除
除了使用github外,还可以使用国内的其它代码托管平台,比如码云,和GitHub相比,码云也提供免费的Git仓库,并且,免费版本还包含私有库。此外,还集成了代码质量检测、项目演示等功能。对于团队协作开发,码云还提供了项目管理、代码托管、文档管理的服务,5人以下小团队免费,而且速度也比github要快。
我们可以这样来使用,添加两个远程库,一个是github一个是gitee,然后到时候看情况分别推送.
git remote add github git@github.com:54BayMax/learngit.git
git remote add gitee git@gitee.com:loveyyp/learngit.git
git push github master
git push gitee master
当git不需要追踪某个类型的文件的时候,可以建一个.ignore文件,然后在里面写上你要忽略跟踪的文件。
# Windows:
# 缩略图文件,桌面文件
Thumbs.db
ehthumbs.db
Desktop.ini
# pyc文件,so文件,dist,build文件夹
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
使用别名来代替原来的github命令
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
链接