Git总结
Git是世界上目前最先进的分布式版本控制系统。下左图表示集中式、下右图表示分布式。Git记录的是每次文件的改动。
创建https://github.com/网站账号。
【git安装】
参考文献:https://help.github.com/articles/set-up-git/#platform-linux
1)$ sudo apt-get install git
2)$ git config --global user.name "YOUR NAME"
3)$ git config --global user.email "YOUR EMAILADDRESS"
关联电脑与github:在用户主目录下运行指令
$ ssh-keygen -t rsa -C XXXX@XXX.com,输入两次密码(可以直接回车),最后将主目录下的.ssh文件夹里的id_rsa.pub文件内所有内容复制到github的SSH keys中,保证代码推送者是主人。
【创建版本库】
$ mkdir learngit
$ cd learngit
$ pwd %创建git仓库目录
$ git init %初始化git仓库(创建.git隐藏文件)
【添加文件到仓库】
$ git add readme.txt %添加文件到git仓库暂存区stage
$ git commit -m "wrote a readme file" % 保存入git仓库,引号为说明内容
$ git addfile1.txt %可以分次添加文件
$ git addfile2.txt file3.txt %可以同时添加多个文件
$ git commit -m"add 3 files."
【查看状态】
$ git status %查看当前工作区和暂存区被修改文件的状态
$ git diff file.txt % 查看当前工作区与暂存区中某文件的差别
$ git diff HEAD -- file.txt % 查看当前工作区与分支库中某文件的差别
【查看版本库及回退与前进】
git commit指的是版本库前移,git reset指的是在gitcommit的版本库间前进或回退
$ git log [--pretty=oneline] % 查看仓库中git commit提交的版本库
$ git reflog % 查看版本库移动的记录,即gitcommit/reset的记录
$ git reset --hard 0a6f3fb % 切换当前版本库,0a6f3fb为commit_id
$ git checkout -- file.txt % 使工作区回到上一次git commit或git add的状态
$ git reset HEAD file.txt % 是暂存区回到上一次gitadd的状态
$ git rm file.txt %删除分支库中文件,并再次git commit,前移版本库。
【远程仓库并关联】
(1)登入github,Create a newrepo
$ git remote add origin git@server-name:path/repo-name.git % 关联远程仓库
如:git@github.com:lichangqing2611/learngit.git
$ git push -u origin master % 第一次推送master分支
$ git push origin master % 之后推送master分支
$ git push origin master –f % 强行覆盖推送,若远程仓库与本地不一致
(2)若在github中创建repo时创建其他的文件,则需克隆到本地
$ git clone git@server-name:path/repo-name.git %克隆远程仓库到本地https/ssh
【分支管理】
查看分支:git branch
创建分支:git branch<name>
切换分支:git checkout<name>
创建+切换分支:gitcheckout -b <name>,先进入某分支,在创建该分支的分支
合并某分支到当前分支:git merge<name>,通过先checkout到master后再合并某分支
删除分支:git branch -d<name>
合并的意思并不是文件合并,而是版本前移,合并的是分支。
$ git merge--no-ff -m "merge with no-ff" <name> % 禁用Fast forward,可以查看分支
分支管理原则:master分支应该非常稳定,用于发布新版本;平时在各分支下工作,合并各分支
正在当前分支工作,但又需要开始其他分支工作,不想提交当前分支版本,使用stash进行管理工作。修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除。当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
$ git stash % 存储当前工作现场
$ git checkout master %修复bug
$ git checkout -b <name>
$ ……
$ git add readme.txt
$ git commit -m "fix <name>"
$ git checkout master
$ git merge --no-ff -m "merged bug <name>" <name>
$ git branch -d <name>
$ git checkoutdev % 切回上一次工作的分支
$ git stash list % 列出存储过的工作现场
$ git stash pop % 恢复工作现场并删除stash内容 或
$ git stash apply stash@{0} %恢复指定的工作现场,并不删除stash内容
$ git stash drop % 删除stash内容
$ git branch -D <name> %丢弃一个没有被合并过的分支,需强行删除当前分支
【标签管理】
标签是唯一确定打标签时刻的版本,是静态的,不移动的。
创建标签:$ git tag -a <tagname>-m "version XXX released" commit_id
如:v1.0
查看标签:$ git tag 或 $ git show <tagname>
删除一个本地标签:$ git tag -d<tagname>
推送一个本地标签:$ git pushorigin <tagname>
推送全部未推送过的本地标签:$ gitpush origin --tags
删除一个远程标签:$ git pushorigin :refs/tags/<tagname>