一、安装Git

   windows 下面 从http://msysgit.github.io下载,默认安装

   Conigure

   git config --global user.name"Your name"

   git config --global user.email"[email protected]"

   创建本地版本库 Repository

       mkdir learningit

       cd learningit

       pwd //显示你的目录绝对地址

   初始化

       git init

二、Add file(files) into repository

   git add readme.txt

   Commit the file(files) to repository

   git commit -m "Wrote a readme file" //-m 支出本次提交说明

       初始化git仓库 git init 命令

   添加文件到git仓库

       git add 可以添加多个文件

       git commit 完成

三、时光穿梭机

   git status 命令掌握仓库当前状态

   git diff readme.txt 命令查看readme.txt文件有哪些内容修改了

   随时掌握工作区状态,git status

   如果git status命令告知文件修改过,使用git diff 查看具体修改内容

四、版本回退

   git log 命令能够告诉我们历史日志

   git log --pretty=oneline --abbrve-commit 命令是的日志信息简化

   版本回退时Git 需要知道当前版本,Git使用HEAD表示当前版本,也就是最新提交,上一个版本为

   HEAD^上上版本为HEAD^^若一百个之前就是HEAD~100

   git reset --hard HEAD^ 是的版本回退到前一个版本

   使用 git reset --hard ID既可以将版本直接回到未来的某个版本

五、管理修改

   只要对文件进行了操作,即为修改。

   ex

       Git管理的是修改,当使用“git add" 命令后,在工作区中的第一次修改被放入暂存区,但是在工作区中的第二次

   修改并未放入暂存区,即 第一次修改--git add --第二次修改--git commit。由此"git commit "只负责将暂存区中的修改提交,只提交了第一次,并未提交第二次修改。        

   必须按照如下过程  第一次修改--git add --第二次修改--add--git commit

   每次修改,如果不add到暂存区,就不会加入到commit中。

六、撤销修改

   git checkout --readme.txt   适用于两种情况:

   readme.txt 自修改后并未存放到暂存区

   readme.txt 已经添加到暂存区,又做了修改,现在撤销修改就回到天骄到暂存区后的状态。

   对于第二种情况,先使用命令 git reset HEAD readme.txt可以将暂存区的修改撤销掉,重新放回工作区。然后使用g

   git checkout --file 来解决

   git reset命令可以回退版本,也可以将工作区总某些文件替换为版本库中的文件。

七、删除文件

   git rm 删除文件 并且commit

八、远程仓库

   注册GitHub

   设置:

   ssh-keygen -t rsa -C "[email protected]"

   将生成的公钥复制到github个人账户中。

九、添加远程库

   在GitHub网站进行操作

       1、Create a new repository

       2、complete some content

   将现有本地库与之关联

       git remote add origin [email protected]:tdppro/Learningit.git

       origin 为远程库的地址,可以自行修改

       git push -u origin master

       将当前分支master推送到远程

       由于远程库为空,第一次推送master分支时,加上-u参数,Git不但会把本地的master

       的分支内容推送到远程新的master分支,还会将本地的master分支和远程master分支关联起来。之后每次只需要使用git push origin master即可推送新的修改。

十、从远程库中克隆

       git clone [email protected]:tdppro/Learningit.git 即可

十一、创建与合并分支

   创建分支: git checkout -b Dev

   实际上是两条命令集合:

   git branch Dev

   git checkout Dev

   git branch 查看当前分支

   在master分支下面使用:git merge Dev 命令将Dev合并到master分支上

   此时的合并为"快进模式",Fast-forward

   git branch -d Dev  删除分支

十二、解决冲突

   当不同分支修改同样的内容之后,在合并是会产生冲突。

   在解决冲突后使用命令:

   git log --graph --pretty=oneline --abbrve-commit查看分支合并情况。

十三、分支管理策略

   合并分支时,Git会使用“Fast-forward"模式,此模式下,删除分支后,会丢掉分支信息。

   如果强制禁用"Fast-forward"模式,Git会在merge时声称一个新的commit,这样就可以从分支历史上看到分支信息

   git merge --no-ff -m "merge with no-ff" dev 本次合并要创建一个新的commit,所以加上-m参数。

   使用git log --graph --pretty=oneline --abbrve-commit 命令查看分支历史。

   实际开发中,我们应该按照几个基本原则进行分支管理:

   master分支应该是非常稳定的,仅用来发布新版本,不能在上面干活。

   干活都必须在其他分支上面

十四、Bug分支

   每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,之后删除临时分支。

   在修复bug时,可以使用命令git stash将当前工作现场“储藏”起来,等到恢复现场后继续工作。

   修复bug时,首先需要确定要在哪个分支上修复bug,假定要在master分支上面进行修复,就从

master创建临时分支:

   git checkout master

   git checkout -b issue-101

   修复之后

   git add readme.txt

   git commit -m "fix bug"

   转换到master分支

   git checkout master

   git merge --no-ff -m "merged bug fix" issue-101

   回到原来分支后,需要恢复原来工作现场

   git stash list

   git stash pop //此命令恢复现场的同时也会将stash 内容删掉

   可以有多个stash恢复时使用git stash list 查看 使用git stash apply stash@{0}恢复 0表示那个stash

十五、Feature分支

   添加新功能时,最好建立一个feature分支,在上面完成后,合并,最后删除分支

example:

   git checkout -b feature-vulcan

   git add vulcan.py  //vulcan.py文件为新功能

   git commit -m "add a new feature"

   切回dev 准备合并。。。。。还没合并 ,此时需要将其删除,销毁....

   但是使用 git branch -d feature-vulcan时提示出错,必须强行删除:

   git branch -D feature-vulcan

   开发一个新feature,最好建立一个分支

   如果要丢弃一个没有被合并过的分支,可以通过git branch -D name 强行删除。

十六、多人合作

   git remote 查看远程库信息

   git remote -v 查看远程库详细信息。

   推送分支:

       推送分支就是将该分支上的所有本地递交推送到远程库,推送时要指定本地分支,这样Git 就会将该分支

   推送到远程库对应的远程分支上 git push origin master

   可以推送其他分支:  git push origin dev

   不是所有的本地分支有需要推送到远程库:

例如:

       master分支是主分支,需要时刻与远程库同步

       dev是开发分支,团队成员需要在上面工作,需要同步

       bug分支只用于本地修复bug,无需推送到远程.

       feature分支是否推送,取决于自己的合作。

抓取分支:

   当小伙伴从远程库中clone时,默认情况下,小伙伴只能看到本地的master分支。

   如果小伙伴要在dev分支上面进行开发,就必须创建远程origin的dev分支到本地,于是利用命令创建本地dev分支

   :git checkout -b dev origin/dev

   现在可以在dev上继续修改,然后将dev分支push到远程:

   git commit -m "add /usr/bin/env"

   git push orig dev

   如果小伙伴已经向origin/dev分支推送了提交,你也对同样文件进行了修改,并试图推送,此时就有了冲突。

   此时需要将最新的origin/dev抓下来,然后再本地合并,解决冲突,再推送:

   git pull //将最新修改抓取

   此时失败了。。。原因是没有指定本地dev分支与远程origin/dev分支的链接,

   设置dev和origin/dev的链接

   git branch --set-upstream dev origin/dev

之后 git pull

   此时依旧有冲突,本地解决冲突即可。

多人合作工作模式:

   首先试图用git push origin branch-name 推送自己的修改

   如果推送失败,则因为远程分支比本地更新,需要先用git pull 合并分支时,Git会使用        git pull试图合并

   如果合并有冲突,则解决冲突并在本地提交

   如果没有冲突,再用git push origin branch-name推送



学习网站:http://www.liaoxuefeng.com/