一、安装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/