首先,git是用来干什么的?如果不清楚这点就不用往下看了,如果您是git使用方面的高手也不用看了,因为此文的作者还处于git使用的初级阶段。 作为一个码农的我,从第一次使用git就被它强大的魅力吸引住了,由于自己太过懒惰的缘故,很多时候会要用的时候会突然想不起来git的相关命令和参数,遂决定开此篇文章来记录自己用过并且以后会用到的git操作,也希望此文能帮到正在看这篇文章的您,本文会不定期更新!
git设置:
git config --global user.name "Vincent":设置用户名 git config --global user.email zhao.qinlong@gmail.com:设置邮箱
建立仓库(repo):
git init <dirname>: 在本地建立git仓库 git --bare init <dirname>:在远程建立git仓库
两者区别在于:执行git init将在当前目录下建立一个.git目录存放git库,当前目录则作为工作目录存放工程文件;而--bare参数则是将当前目录用做git库目录,而 不再建立一个.git子目录。一般在本地初始化仓库使用git init,而初始化远程仓库则加上--bare参数。因为远程仓库一般只是用来存放git库而已,没人会在远程仓库中进行check out或者编辑文件等操作。
几个概念:
working tree:当下的工作目录,就像svn checkout出来的工作目录; staging area:git独有功能,是一块暂存的cached区域,用来记录什么是你待会要commit的档案;
将档案添加到git的staging area:
git add .:加入当前目录下的所有档案,包括所有还没有被追踪(untracked)的档案; git add -i:进入互动模式来添加,你甚至可以只添加档案里面其中的一段程序代码到staging area中去(称作patch); git add -u:只加更新的档案,不加入还没有追踪的档案(跟git commit -a 涵盖的范围相同)
注意:add完之后进行的commit是对于add操作之前的档案进行的commit,假如add之后又进行了修改,则此修改不会出现在commit当中
git status:
changed but not updated:有修改但是没有加入staging area的档案 changed to be commited(staging area):已经加入staging area的档案 Untracked:尚未被追踪的新档案
git commit:将staging area的东西提交到本地档案库:
git commit -m "blah":如果沒加 -m 的話, 会打开编辑器输入 commit log (可以在.gitconfig中設定编辑器) git commit -a -m "foobar":全部修改的档案都 add 後 commit 出去 (不包括 untracked 的新档案) git commit -v:会打开编辑器加上 diff 注解
比较差异:
git diff:比较 working tree 和 staging area git diff --cached:比较staging area和本来的 repo git diff HEAD:比较 working tree 跟本来的 repo
分支操作:
git checkout -b develop master:从master分支创建一个develop分支用于开发进程; git checkout master:由其他分支切换到master分支; git merge --no-ff develop:将develop分支合并到当前分支; git branch -d release-1.2:删除release-1.2分支; git branch 建立本地 local branch git branch -m 改名字 (如果有同名會失敗,改用 -M 可以強制覆蓋) git branch 列出目前有那些 branch 以及目前在那個 branch git checkout 切換 branch (注意到如果你有檔案修改了卻還沒 commit,會不能切換 branch,解法稍後會談) git checkout -b () 本地建立 branch 並立即 checkout 切換過去 git branch -d 刪除 local branch
备注:微解释一下,上一条命令的--no-ff参数是什么意思。默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。关于合并的更多解释,请参考Benjamin Sandofsky的《Understanding the Git Workflow》。另外,关于git分支管理的建议,这里有几篇文章值得一读:Git分支管理策略,一个成功的Git分支模型