一 新建分支
创建本地分支1:$ git branch [name] //新分支创建后不会自动切换为当前分支
创建本地分支2:$ git checkout -b [name] //建立分支并切換到该分支
创建远程分支:$ git push origin [name] //需要本地分支存在
二 删除分支
删除本地分支: $ git branch -d [name] //删除本地分支但不会删除对应的远端分支,处于当前分支时不能删除自己,删除前不会检查该分支是否已经被合并到其他分支
删除本地分支:$ git branch -D [name] //删除本地分支但不会删除对应的远端分支,处于当前分支时不能删除自己,删除前会检查该分支是否已经被合并到其他分支
删除远端分支: $ git push origin --delete [name] //适用git 1.7.0以后
删除远端分支: $ git push origin :[name] //推送一个空分支到远端,就相当于删除该分支,注意origin后边必须有一个空格,不然删除不了
三 查看分支列表
查看本地分支:$ git branch -l //参数l可以省略
查看所有分支:$ git branch -a //列出本地和远端的分支,红色字体为远端分支
查看远程分支1:$ git branch -r //查看远端分支
查看远程分支2: $ git remote show origin //查看带跟踪状态的远端分支
四 切换分支
切换分支1:$ git checkout -b [name] //当带-b参数时如果本地无此分支会先创建分支并切换到此分支,如果本地有此分支则直接切换到该分支
切换分支2: $ git checkout [name] //切换到的分支必须存在,否则切换失败
五 合并分支
假设目前存在master分支 和 develop分支,当我们想把develop合并到master时,首先需要切换到master分支,然后在master分支执行merge命令,这样就完成了分支的合并;
合并分支1:$ git merge develop
合并分支2:切换到develop分支,执行git rebase master,执行完毕切换到master分支,执行 git merge develop即可,当然也可直接把develop分支推送到远端命令如下- git push origin develop:master(如果rebase期间发生冲突,请解决冲突,然后执行git rebase --continue/git rebase --abort);
六 提交代码
添加到索引库1: $ git add [name] [name] .... //可以批量添加,以空格分隔文件名称
添加到索引库2: $ git add -A [name] //表示添加所有有变化的内容
. [name] //表示添加新文件和编辑过的文件不包括删除的文件
-u [name] //表示添加编辑或者删除的文件,不包括新添加的文件,-u表示update
提交代码:$ git commit -m [des] // [des]提交说明必须填写,不然提交失败
推送到远端版本库:$ git push [--force] <远程主机名> <本地分支名>:<远程分支名> //如果省略远程分支名,则表示将本地分支推送到与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在则会被新建,此命令不会推送tag到远端版本库;
修改提交 $ git commit --amend //修改上次提交信息,比如错误的提交说明或者错误的文件
七 拉取代码
$ git fetch <远程主机名> <分支名> //拉取更新的代码但是不合并代码,其中远程主机名通过git remote获取,代码拉取到本地后如果没有冲突必须执行合并操作才能同步代码到本地
$ git pull <远程主机名> <远程分支名>:<本地分支名> //取回远程主机某个分支的更新与本地的指定分支合并,如果远程分支是和本地当前分支合并,则本地分支可以省略
八 查看分支变化历史
$ git status 【-s】//查看有哪些文件发生了变化,参数s代表显示简略说明,省略s则显示信息比较全面
其中的M代表本地库和暂存区之间代码有修改,我们可以看见M前边有个空格,其实那个空格代表版本库和暂存区之间没有文件修改,如果有修改也会显示M;
九 冲突解决
1:手动解决冲突
当提交发生冲突时,冲突文件会被插入一些火星文字,我们去开发工具修改完冲突再次提交即可;
2: 工具解决冲突
当合并分支遇见冲突时我们可以执行 git mergetol 命令,此时git会调用kdiff3 vim编辑器,它会把工作区代码,暂存区代码,版本库代码都展示出来我们根据自己的需求修改冲突即可,修改完毕执行git merge --continue完成代码合并;
十 查看提交历史
$ git log //查看详细历史操作记录
选项 说明
-p 按补丁格式显示每个更新之间的差异
--stat 显示每次更新的文件修改统计信息
--shortstat 只显示 --stat 中最后的行数修改添加移除统计
--name-only 仅在提交信息后显示已修改的文件清单
--name-status 显示新增、修改、删除的文件清单
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)
--graph 显示 ASCII 图形表示的分支合并历史
--pretty 使用其他格式显示历史提交信息,可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)
$ git reflog //查看简介历史操作记录
$ git show [commit] //查看此次提交明细,一般都是先调用git reflog命令找到提交标记
十一 文件操作
$ git rm [name](包括路径) //删除指定文件
$ git rm -r [dirs] //删除指定目录
十二 代码重置与撤销提交
主要涉及两个命令git reset和git revert,下边分别讲述。
1: git reset
git reset有三种重置模式;
第一种是--mixed模式,这种模式只是回退commit,不会删除源码,并且是系统默认的方式;
第二种是--softed模式,这种模式只回退commit信息,会删除源码;
第三种是--hard模式,这种模式会彻底回退至某个版本,不仅仅是commit,并且会删除源码;
2: git revert
git revert可以用来撤销一次提交或者一次merge;
十三 查找文件差异
1: $ git diff //比对工作区和暂存区的代码差异
2: $ git diff HEAD //比对工作区和版本库分支的代码差异
3: $ git diff --cached/--staged //比对暂存区和版本库中代码的差异
十四 分支打tags
1: $ git tag [tag-name] -light //创建轻量标签,标签是指向提交对象的引用
2: $ git tag [tag-name] -m [des] //创建附注标签,信息会保存在标签对象中
(还有一种加密标签,这里就不再说明了)
3: $ git tag //查看本地标签
4: $ git ls-remote --tags //查看远程标签
5: $ git tag -d [tag-name] //删除本地标签
6: $ git push orgin [tag-name] //推送本地tag到远端
7: $ git push origin –tags //将本地所有标签一次性提交到git服务器
8: $ git checkout [tag-name] //切换到某个标签
9: $ git show [tag-name] //查看标签
十五 特别说明
由于git命令非常多,这篇文章只是列出了基本常用的git命令,可以满足日常的git使用场景;