基础模块:
查看配置:
git config --list --show-origin 或者 git config --list
查看某项配置信息:
git config user.name
配置基本信息:
git config --global user.name "John Doe"git config --global user.email johndoe@example.com
配置编辑器:
git config --global core.editor emacs emacs是编辑器的名字
初始化git:
git init
克隆:
git clone XXXXX地址
对于没有添加追踪的文件来说是添加文件或者文件夹,也就是开始追踪该文件或者文件夹;对于已经追踪的文件来说是将修改的文件暂存到暂存区:
git add XXX文件名或者文件夹的名字
提交
提交暂存区域的文件:
git commit -m 'XXXXXXXX文字说明'
添加到暂存区域和提交同时进行:
git commit -a -m 'XXXXXXXX文字说明'
查询git文件的状态:
git status
更为简短的查询文件状态:
git status -s 或 git status --short
查看差异
查看已暂存和未暂存的修改
git diff
只查看暂存区域的文件,这条命令将比对已暂存文件与最后一次提交的文件差异
git diff --staged
查看已经暂存起来的变化,可以理解和上边的是一样的作用
git diff --cached
移除文件
前提是没有修改过并已经追踪的文件,从工作目录中删除指定的文件(本地项目中的文件也会删除),提交之后,不会在追踪该文件
git rm XXXX文件名
如果是在暂存区或者在已近修改过的文件
git rm -f XXXX文件名
删除文件在git中的记录,本地工作目录中的文件还在,用在已近提交忘记忽略的文件
git rm --cached XXXX文件名
移动文件
git mv file_from file_to
相当于执行了:
$ mv README.md README
$ git rm README.md
$ git add README
查看提交记录
git log
想要查看最近提交的n条数据:
git log -n
一行显示(前者显示端SHA-1,后者显示完整的值)
git log --oneline或者git log --pretty=oneline
附带简短的修改信息
git log --stat
输出指定格式的提交信息
git log --pretty=format:"%h - %an, %ar : %s"
支持格式如下:
%H 提交的完整哈希值
%h 提交的简写哈希值
%T 树的完整哈希值
%t 树的简写哈希值
%P 父提交的完整哈希值
%p 父提交的简写哈希值
%an 作者名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 --date=选项 来定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期(距今多长时间)
%s 提交说明
命令详细说明:
-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(用来定义自己的格式)。
--oneline --pretty=oneline --abbrev-commit 合用的简写。
-<n> 仅显示最近的 n 条提交。
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示作者匹配指定字符串的提交。
--committer 仅显示提交者匹配指定字符串的提交。
--grep 仅显示提交说明中包含指定字符串的提交。
-S 仅显示添加或删除内容匹配指定字符串的提交。
提交
补提交,第二次提交的将覆盖第一次提交,记录里面只会有一次提交,运行之后会打开编辑器
git commit --amend
如果文件暂存了,想要恢复期非暂存的状态
git reset HEAD <file>
还原文件成上次提交的样子
git checkout -- <file>
远程仓库
查看远程仓库的名称
git remote
查看远程仓库的名称和url
git remote -v
添加远程仓库
git remote add <shortname(仓库简称)> <url仓库Ur>
拉取某个远程仓库的代码到本地仓库,但并没有合并到你的分支上
git fetch pb(本地添加仓库的时候简称)
从服务器上抓取数据并自动尝试合并到当前所在的分支
git pull
推送到远端
git push <remote远端简称> <branch远端分支>
查看某一个远程仓库的更多信息
git remote show <remote>
修改远端简称的名字
git remote rename pb paul
删除远端
git remote remove 远端名称 或 git remote rm 远端名称
TAG相关
查看Tag,显示内容一致
git tag 或者 git tag -l 或者 git tag --list
创建附注标签
git tag -a v1.4标签名字 -m "my version 1.4提交信息"
显示标签的信息
git show v1.4
创建轻量标签
git tag v1.4-l
补打标签,
git tag -a v1.2 9fceb02(SHA-1值,可以是完整或者部分值)
推送单个标签到远端
git push origin <tagname>。
推送所有标签到远端
git push origin --tags
删除本地标签
git tag -d <tagname>。
将删除的本地标签推送到远端
git push <remote> :refs/tags/<tagname> 或者 git push <origin> --delete <tagname>
配置别名
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
下次输入命令的时候就可以如下使用:
git co === git commit
git.br === git branch
分支模块:
查看分支(分支前的 * 字符:它代表现在检出的那一个分支):
git branch
查看每个分支的最后提交:
git branch -v
--merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支。显示已合并的分支:
git branch --merged
创建分支(不会切换分支):
git branch testing 分支名字叫testing
切换分支(分支要干净才能快速切换,不干净的话使用commit或者stash命令,提交或缓存下文件):
git checkout testing
创建一个分支并切换到新建的分支上:
git checkout -b <newbranchname>
合并分支(将其他分支代码合并到当前分支中,合并类型一般就两种:fast-forword快进,三方合并(两个分支没有直接关联的父节点,即劈叉的分支)):
$ git checkout master 将分支切换到master
$ git merge hotfix 把hotfix上的代码合并到master上
删除分支:
git branch -d hotfix 删除hotfix分支,前提是被删除的分支没有相关的修改,如果被删除的分支有修改,则使用—D去删除
git branch -D hotfix
显示远程分支信息:
git ls-remote <remote> 来 显式地获得远程引用的完整列表
git remote show <remote> 获得远程分支的更多信息(拉去推送代码的地址,和本地分支关联的远程分支)
克隆的时候修改远程分支的名字:
git clone -o AAAAA http://gitlab.dmall.com/breeze/DmallMiniOSAndroid.git
远端的名字被命名为AAAAA
获取远程的数据到本地,并没有合并到相应的分支上:
git fetch <remote> (remote:远程分支的名字)
添加新的远程:
git remote add BBBBB http://gitlab.dmall.com/breeze/DmallMiniOSAndroid.git
推送分支:
git push <remote> <branch> 推送的本地分支和远程的同名,并关联
git push origin serverfix:awesomebranch 将本地serverfix分支推送到远程awesomebranch分支,并建立关联
创建本地分支并关联远程分支(这几个命令相等)
git checkout -b <branch> <remote>/<branch> (第一个branch是本地分支名字,remote是远程仓库名字,remote是远程分支名)
git checkout --track <remote>/<branch>
git checkout -b <branch> <remote>/<branch>(第一个branch是本地分支名字,remote是远程仓库名字,remote是远程分支名)
修改远端的追踪分支:
git branch -u origin/serverfix
git branch --set-upstream-to origin/serverfix
将当前HEAD所在的分支,远端关联的分支修改为origin/serverfix,若没有关联则关联上origin/serverfix这个分支
上游快捷方式
当设置好跟踪分支后,可以通过简写 @{upstream} 或 @{u} 来引用它的上游分支。 所以在
master 分支时并且它正在跟踪 origin/master 时,如果愿意的话可以使用 git merge @
{u} 来取代 git merge origin/master。
git branch -vv命令解释:
$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this
should do it
testing 5ea463a trying something new
这里可以看到 iss53 分支正在跟踪 origin/iss53 并且 “ahead” 是 2,意味着本地有两个提交还没有推送
到服务器上。 也能看到 master 分支正在跟踪 origin/master 分支并且是最新的。 接下来可以看到
serverfix 分支正在跟踪 teamone 服务器上的 server-fix-good 分支并且领先 3 落后 1, 意味着服务器上
有一次提交还没有合并入同时本地有三次提交还没有推送。 最后看到 testing 分支并没有跟踪任何远程分支。
拉取:
git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
如果只想取回特定分支的更新,可以指定分支名:
git fetch <远程主机名> <分支名> //注意之间有空格
git pull <远程主机名> <远程分支名>:<本地分支名> 拉取并合并对应的关联分支代码
删除远程分支:
git push origin --delete serverfix
变基(把当前分支的代码合并到别的分支上):
$ git checkout experiment
$ git rebase master
先切换到experiment分支上在,将experiment分支(挡墙分支)上的代码合并到master上
git rebase master server将server上的代码变基到master上
git rebase --onto master server client
client是server分支中切出去的,该命令是指:将client分支中和server中的差异变基到master中