git学习总结
熟练使用git是一种基本能力,这里记录一下常用命令及其含义
安装git
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门
$ git config --global user.name “Your Name”
$ git config --global user.email "email@example.com"
注意git config命令的–global参数,用了这个参数,表示这台机器上所有的Git仓库都会使用这个配置,当然也可以单独配置
创建版本库
初始化一个Git仓库,使用git init命令
该命令会生成.git目录,默认隐藏,在Linux系统下,用ls -ah命令查看
添加文件到Git仓库,分两步:
1.git add ,注意,可反复多次使用,添加多个文件
2.git commit -m “message”,完成
掌握版本库状态
要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
文件的四种状态:
Untracked:未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged
Unmodify:文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
Modified:文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态,使用git checkout则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
Staged:暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态.执行git reset HEAD filename取消暂存, 文件状态为Modified
Git 状态 untracked 和 not staged的区别
1)untrack 表示是新文件,没有被add过,是为跟踪的意思。
2)not staged 表示add过的文件,即跟踪文件,再次修改没有add,就是没有暂存的意思
时空穿梭
git log命令显示从最近到最远的提交日志
git log --pretty=oneline简略显示
git reset --hard commit_id head回退指向commit_id对应的一次提交
git reflog用来记录每一次历史命令
查看区别
git diff HEAD – file 命令可以查看工作区和版本库里面最新版本的区别
git diff 比较的是工作区文件与暂存区文件的区别(上次git add 的内容)
git diff --cached 比较的是暂存区的文件与仓库分支里(上次git commit 后的内容)的区别
撤销修改
git checkout – file可以丢弃工作区的修改
让这个文件回到最近一次git commit或git add时的状态
git reset HEAD 可以把**暂存区的修改(add)**撤销掉(unstage),重新放回工作区
删除文件
命令git rm file用于删除一个文件,然后git commit提交
撤销误删git checkout – file其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
推送至远程库
关联远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
git push -u origin master
第一次推送master分支时,加上-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master
分支管理
git checkout -b dev
git checkout命令加上-b参数表示创建并切换
git branch dev //创建分支
git checkout dev //切换到分支
git branch命令查看当前分支,会列出所有分支,当前分支前面会标一个*号
合并某分支到当前分支:git merge dev
删除分支:git branch -d dev
git log --graph命令可以看到分支合并图
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
git merge --no-ff -m “merge with no-ff” dev
Bug分支
git stash把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list查看保存的工作现场
git stash apply恢复,但是恢复后,stash内容并不删除,需要用git stash drop来删除
git stash pop,恢复的同时把stash内容也删了
多人协作
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,如果有冲突,要先处理冲突。
标签
1.首先切换到需要打标签的分支上
命令git tag tagname commit_id用于新建一个标签,默认为HEAD,也可以指定一个commit id;
命令git tag -a tagname -m "blablabla…"可以指定标签信息;
命令git tag可以查看所有标签。
git show tagname查看标签信息
2.命令git push origin tagname可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d tagname可以删除一个本地标签;
命令git push origin :refs/tags/tagname可以删除一个远程标签。