git常用命令总结
git配置相关命令
配置相关的命令都使用git config
开始。详细请参看git config --help
.常用到的git配置命令如下:
- 查看git所有配置项
git config -l
或git config --list
- 直接修改配置文件
git config -e --global
:此命令会调出配置文件。
- 邮箱和用户名配置
- 配置全局的邮箱和用户名
git config --global user.name "user name"
git config --global user.email "xxx@nnn.com"
- 为某个项目配置本地的邮箱和用户名
git config user.name "user name"
git config user.email "xxx@nnn.com"
- 配置全局的邮箱和用户名
- 设置编辑器
git config --global core.editor "path/\notepad++.exe -multiInst -notabbar -n"
git远程仓库相关的命令
远程相关的命令都使用git remote
开始。详细请参看git remote --help
.常用到的远程命令如下:
当我们使用git clone
克隆远程仓库时,git会自动创建一个远程仓库名origin
.与远程仓库的URL连接。自动把本地的master分支和远程的master分支对应起来了。
- 查看远程库的名字与信息
git remote
git remote -v
:显示更详细的信息。包括URLgit remote show <remote_name>
:查看某个远程仓库详细信息。包括跟踪的分支信息。
- 添加远程库
git remote add <name> <url>
:name表示为远程仓库分配的名称,url为远程仓库的地址。
- 远程仓库重命名
git remote rename <oldname> <newname>
:
- 删除添加的远程库
git remote remove name
git克隆相关命令
git使用git clone
命令进行仓库的克隆。常用命令参数如下:
-o name
:使用指定的name代替origin名。-b branch_name
:克隆指定的分支。--single-branch
:只克隆指定分支。配合-b
选项使用--depth=n
:克隆的深度,克隆最近n次的commit.
常用clone例程:
git clone git@git.n.xxx.git
:克隆远程仓库所有内容。git clone git@git.n.xxx.git newname
:克隆远程仓库所有内容并指定新名称。
git分支相关的命令
- 查看仓库的分支信息
git branch
:查看所有本地分支.当前分支前面会标一个*
。常用参数如下:-a
:查看所有的分支,包括远程分支-v
:查看分支指向的commit-vv
:查看本地分支与远程分支的匹配关系--merged
:查看合并的分支--no-merged
:查看没有合并的分支
- 创建分支
git branch <branch name>
:在当前提交上创建一个分支git branch <branch name> <base_name>
:基于指定的某个commit或者分支创建分支。base_name为commit号或分支名。
- 切换分支
git checkout <branch name>
git checkout -b <branch name>
:创建并切换(当分支已经存在时切换不了)git checkout -b dev origin/dev
:创建本地的dev分支并与远程的origin/dev分支连接。
- 删除分支
git branch -d <branch name>
:删除指定分支.-D
为强制删除
- 如果您已经有一个本地分支,并希望将其设置为刚刚下拉的远程分支,或者希望更改正在跟踪的上游分支
git branch --set-upstream-to=origin/<branch> dev
--set-upstream-to
与-u
同义。
git提交相关的命令
- 查看仓库文件的状态
git status
:查看详细状态,有下面一些描述状态。- nothing to commit, working tree clean:所有的更改都已经提交到本地仓库了。
- no changes added to commit:更改了文件,但没有存放到暂存区(没有执行
git add
命令) - Changes to be committed:对更改文件做了缓存,但没有提交。
git status -s
,git status -short
??
:未跟踪a
:未跟踪文件使用git add
命令添加到暂存区时标记此状态。M
:修改。即对文件进行了修改,但未使用git add
命令添加到暂存区。MM
:同时处于修改阶段和暂存阶段。即已经使用git add
命令添加到暂存区,然后又进行了修改。
- 将文件添加到暂存区
git add filename
。filename 可以是.
,代表所有文件。也可以是表达式如*.c
,代表所有的c文件。
- 将文件提交到本地仓库。命令为
git commit
,常用选项如下:-m "message"
.message为提交时的说明信息。可以使用"message. Ref #xxx"
格式绑定issue。-v
:提交时可以查看详细的修改信息。-a
:自动将工作区中的内容添加到暂存区,然后提交。-s
:提交时添加提交者信息。--amend
:修改本地某次的提交信息.
git对比文件相关的命令
git diff
命令用于比较文件之间的不同。常见选项如下
- 直接使用
git diff
:比较工作区与暂存区的各个文件区别 - 比较暂存区与最后一次提交的区别
git diff --staged
- 比较两次提交之间的差异
git diff [commit1]...[commit2]
git log日志相关的命令
git log
用于查看提交日志
- 直接使用
git log
:列出所有历史记录,最近的排在最上方.q
退出。-p
:(patch)列出每个commit不同的详细信息。-n
:显示前n条.-stat
:查看概要--no-merges
:防止显示合并提交--since
:指定查看时间。如两天前的提交历史git log --since=2.days
--author
:指定作者。如指定作者为"BeginMan"的所有提交git log --author=BeginMan
--grep
:指定关键字。如指定关键字为“init”的所有提交git log --grep=init
--committer
:指定提交者。如指定提交者为"Jack"的所有提交git log --committer=Jack
--pretty
:指定显示格式。如每个提交信息显示一行。git log --pretty=oneline
- 选项可以是oneline,short,medium,full,fuller,email,raw以及format。详见progit文档。34页。
-S
:通过查询文件的变更内容来检索出指定提交日志.如git log -S xxx
。
git log [-option] filename
:查看指定文件的log日志。filename也可以是分支名。如果分支名与文件名相同,系统会提示错误,可通过–
选项来指定给定的参数是分支名还是文件名git log --oneline --decorate
:查看分支与commit的关系
回退/撤销等操作命令
git reset
用于回退相关操作。reset的三种方式:
介绍详见:https://www.jianshu.com/p/c2ec5f06cf1a
-
git reset --hard HEAD^
:将工作区,暂存区、仓库全都恢复到上一个版本。主要用于放弃本地所有的修改。 -
git reset --soft HEAD^
:只将仓库恢复到上一个版本,工作区和暂存区的内容不变。这个功能主要用来合并多个commit. -
git reset --mixed HEAD^
:(reset的默认方式)。将仓库和暂存区恢复到上一个版本,工作区内容不变。 -
git reset HEAD^
:回退所有内容到上一个版本 -
git reset HEAD^ a.py
:回退a.py这个文件的版本到上一个版本 -
git reset –soft HEAD~3
:向前回退到第3个版本 -
git reset –hard origin/master
:将本地的状态回退到和远程的一样 -
git reset 057dcc
:回退到某个版本 -
git revert HEAD
:回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit -
git reset HEAD CONTRIBUTING.md
:将缓冲区的内容撤回到工作区 -
git checkout -- filename
:撤销工作区中被修改的内容.用于文件还没有执行git add
之前的修改。
git向远程仓库提交相关命令
-
向远程分支推送.
git push <远程仓库名> <本地分支名>:<远程分支名>
:这里的:
前后是必须没有空格的。- 如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建.如
git push origin master
. - 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。如
git push origin :master
.它等同于git push origin --delete master
- 常见选项如下:
-u remote_name
:如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push.--force
:强制推送。--force-with-lease
:没有人在上游更新分支内容,时才可以强制推送。--all
:不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机.--delete
:用于删除某个远程分支。如git push origin --delete <branch_name>
。
- 默认只推送当前分支.
- 如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建.如
-
从远程分支拉取
git fetch <remote> <branch>
:将远程仓库拉取到本地。如git fetch origin master
git pull <remote> <branch>
:从远程获取最新版本并merge到本地。如git pull origin master
使用--force
或--force-with-lease
强制向master
分支推送时可能依然会报错(You are not allowed to force push code to a protected branch on this project.)这是由于gitlab等服务器设置了主分支保护造成的。可以在"Settings" -> “Repository” -> scroll down to “Protected branches”.取消。
如果使用http url推送,每次提交时都会要求输入用户名和密码,为了方便,可以使用git config --global credential.helper cache
来缓存。
git合并相关的命令
- 合并:
git merge --no-ff -m "merged bug fix 101" issue-101
- –no-ff:表示普通合并。
git merge --abort
:终止合并
合并流程:以A分支向B分支合并为例。
- 切换到B分支目录。
git checkout B
. - 确保B分支是干净的。
- 合并
git merge A
- 如果有冲突需要解决冲突。然后commit.
- 使用
git log
查看合并结果
rebase(变基)
变基使得提交历史更加整洁。你在查看一个经过变基的分支的历史记录时会发现,尽管实际的开发工作是并行的,但它们看上去就像是先后串行的一样,提交历史是一条直线没有分叉。
git rebase master
:将当前分支变基到maser分支上
git rebase -i HEAD~3
git杂项命令
git help <cmd>
:获取命令的详细帮助git add -h
:获取add命令的简单帮助git rm filename
:删除某个文件。filename可以是表达式。如//*前必须要有\ git rm log/\*.log
- 1
- 2
git rm --cached filename
将某个文件从暂存区踢出。使其不受版本管理,这个文件仍然存在于工作区。git mv file_from file_to
:移动文件
git 将修改内容暂存
git stash
:把当前工作现场“储藏”起来,等以后恢复现场后继续工作.git stash pop
:恢复的同时把stash内容也删了.git stash list
git子模块的使用
子模块简单的说就是项目需要包含并使用另一个项目。子模块允许你将一个git仓库作为另一个git仓库的子目录。它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。
将一个已存在的git仓库添加为正在工作的仓库的子模块:
git submodule add myproject_url.git
- 默认情况下,子模块会将子项目放到一个与仓库同名的目录中。如果你想要放到其他地方,那么可以在命令结尾添加一个不同的路径。如:``.
- 执行此命令后,会生成一个
.gitmodules
的文件,保存着模块的相关信息。
克隆含有子模块的仓库:
- 如果我们已经clone了项目,但没有包含子模块内容时,使用如下命令:
git submodule init
git submodule update
- 当然,可以选择在clone项目同时clone子模块,如下
git clone --recurse-submodules myproject_url.git
tag标签
git tag
:查看所有标签(默认为按字母顺序排序)
git tag -l "v1.8.5*"
:查看感兴趣的分支
git tag -a v1.4 -m "my version 1.4"
:创建标签
-a:表示带注释的标签
git支持两种类型的tag:
- lightweight:类似分支,不能修改
- annotated:带注释的tag
git push origin --tags
:推送标签到remote
git checkout tag
:检出标签
git checkout -b version2 v2.0.0
:基于某个标签创建分支
git运行外部命令,用别名包装,外部命令用!
修饰
git config --global alias.visual '!gitk'
git相关文件介绍
每个仓库都有一个.git
的文件,用来管理仓库。
config文件
config
文件:存储仓库的配置信息,里面包含了仓库的远程地址,分支等信息。
gitignore文件
.gitignore
文件可以有多个,每个此文件只负责它一个它的子目录。
支持正则表达式
[abc]
:匹配括号中的任何字符。如a
,b
,c
.
?
:匹配单个任意字符
*
:跨多个路径
**
:匹配多个任意字符
[0~9]
:匹配一个范围
!
:不包括某个文件
eg:
*.a
!lib.a
/TODO
build/
doc/*.txt
doc/**/*.pdf
- 1
- 2
- 3
- 4
- 5
- 6