之前用的是SVN,打算学一下Git(廖雪峰的教程),做一下笔记哈!主要是常用命令使用方法,便于查询。
创建版本库:在你喜欢的目录下建立一个新的目录“learngit”,然后进入该目录并通过git init
命令把这个目录变成Git可以管理的仓库。
把文件添加到版本库:由于Git只能跟踪文本文件的改动,所以要添加的文件应该是文本文件。比如“1.txt”,将该文件放在learngit目录下,使用“git add 1.txt”将文件添加到版本库。
把文件提交到仓库:git commit -m "this is a file"
(-m “” 后跟一个提交说明,方便阅读)(先add后commit,add可以分多次add很多文件,commit一次即 可将add过的文件提交)
查看工作区的状态:使用git status
命令。
查看版本控制系统的修改历史记录:git log
回退到某一个版本:git reset --hard HEAD^
一个HEAD^表示上一个版本,HEAD^^表示上上个版本,HEAD~100 表示向上100个版本
git reset --hard 版本号的前几位 也可以回到某个指定的版本
Git回退版本就像C里面的指针一样,通过某个地址直接指向某个版本,速度很快
查看命令历史:git reflog
查看工作区和版本库里面最新版本的区别:git diff HEAD -- 文件名
每次修改,如果不用git add
到暂存区,那就不会加入到commit
中。
把文件在工作区的修改全部撤销:git checkout -- 文件名
用版本库里的版本替换工作区的版本:git checkout -- 文件名
把暂存区的修改撤销掉(unstage),重新放回工作区:git reset HEAD 文件名
从版本库中删除文件:git rm 文件名 , 然后 git commit -m "" 提交
工作区和暂存区的概念:文件存在于工作区,add将文件放到暂存区,commit将文件放入版本库。
要关联一个远程库,使用命令:git remote add origin git@server-name:path/repo-name.git
;
关联后,使用命令:git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令:git push origin master
推送最新修改
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
用git log --graph
命令可以看到分支合并图
拿张老廖的图。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
在修复bug时, 我们要先创建一个新的分支,在新分支上进行bug修复,然后合并,最后删除新分支。
如果手头有未完成的工作,我们可以先把工作现场“git stash”一下,然后去修复bug,然后再返回工作现场的分支“git stash pop”一下,即可回到工作现场。
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过 git branch -D <name>
强行删除。
多人协作的工作模式通常是这样:
-
首先,可以试图用
git push origin <branch-name>
推送自己的修改; -
如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; -
如果合并有冲突,则解决冲突,并在本地提交;
-
没有冲突或者解决掉冲突后,再用
git push origin <branch-name>
推送就能成功!
如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
查看远程库信息:git remote -v
本地新建的分支如果不推送到远程,对其他人就是不可见的
从本地推送分支,使用git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
;
从远程抓取分支,使用git pull
,如果有冲突,要先处理冲突
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
命令git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id,git tag <tagname> <commit id>
命令git tag -a <tagname> -m "blablabla..."
可以指定标签信息
命令git tag
可以查看所有标签
推送一个本地标签:git push origin <tagname>
推送全部未推送过的本地标签:git
push origin --tags
删除标签:git tag -d <tagname>
删除一个远程标签:git push origin :refs/tags/<tagname>
忽略某些文件时,需要编写.gitignore
.gitignore
文件本身要放到版本库里,并且可以对.gitignore
做版本管理