01_Git 命令列表


时间:2018-04-13 作者:魏文应


说明

这个文档适合已经会使用git,但又经常遗忘一些指令的读者。也就是这是用来查表的。

  • git 版本:

  • 操作系统:ubuntu 14.04LTS 32bit

一、常用指令列表

功能 命令 示例 示例说明
初始化仓库 git init git init 在当前目录下生产一个 .git 文件夹,这就是所谓该项目的本地仓库。
跟踪文件 git add git add *.c 跟踪当前目录下的所有 .c 文件,也就是暂存,添加内容到下一次commit提交中。
提交保存 git commit git commit 将跟踪的文件提交,保存到本地仓库。
提交保存 git commit git commit -m "笔记信息" 加上 -m 参数,后面可以加上一些修改信息描述,以便以后查看笔记。
提交保存 git commit git commit -a -m "笔记信息" 加上 -a 参数,把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤。
检查文件状态 git status git status -s 查看当前文件状态。可加参数 -s,显示的更紧凑一些。
查看暂存改动 git diff git diff 查看已暂存和未暂存的修改,只显示尚未暂存的改动。
查看已暂存修改 git diff --staged git diff --staged 显示已暂存的改动。
移除文件 git rm git rm main.c 将某个文件从暂存区移除(工作目录下对应的文件也会被删除),下次提交就没有这个文件。
移除文件 git rm git rm --cached main.c 将某个文件从暂存区移除(工作目录下保留对应的文件不被删除),下次提交就没有这个文件。
检出暂存区文件 git checkout git ckeckout -- readme.md 将一个文件从暂存区检出,覆盖工作目录下相对应的一个文件。
检出已提交文件 git checkout git checkout 3115f6 readme.md 将某个文件从已提交的某个版本中检出,覆盖工作目录和暂存区相对应的一个文件,其中 3115f6 是通过git log 命令查看到的某个版本ID(commit ID)。
撤销暂存 git reset HEAD git reset HEAD readme.md 执行git add readme.md 命令之后,我想撤销这个暂存操作。
文件重命名 git mv git mv file_from file_to 暂存区和工作区的这个文件都被重命名了。
--------------------------------------------- ------------------------------------------- -------------------------------------------------------------------------------------

二、远程仓库操作

功能 命令 示例 示例说明
克隆项目 git clone git clone https://github.com/libgit2/libgit2 这里将从github这个网站,下载一个项目的源代码
查看远程仓库 git remote git remote -v 加上 -v 参数,会把远程仓库地址也显示出来
添加远程仓库 git remote add git remote add <shortname> <url> shortname 是指定一个简称,url 是仓库的网络地址
删除远程仓库 git remote rm git remote rm wwy 删除一个远程仓库
拉取信息 git fetch git fetch wwy 从wwy代表的URL地址,拉取本地没有的信息
推送到远程仓库 git push git push wwy master 将master分支推送到wwy上
远程仓库信息 git remote show git remote show [remote-name] 查看具体某个远程仓库的详细信息
远程仓库重命名 git remote rename git remote rename old new 将远程仓库重命名

三、分支操作命令

功能 命令 示例 示例说明
创建分支 git branch git branch testing 创建一个叫 testing 的分支
切换分支 git checkout git checkout testing HEAD切换到testing分支上
合并分支 git merge git merge hotfix 合并hotfix分支到当前分支上
删除分支 git branch -d git branch -d hotfix 删除hotfix分支,强制删除使用-D参数
查看分支指向 git log git log --oneline --decorate 查看当前分支指向的对象
查看分支列表 git branch git branch -v 列出所有分支,-v 参数可以显示一下概要信息
远程分支列表 git branch git branch -a 列出所有远程分支
变基操作 git rebase git rebase master 将当前分支的基础分支设置为master
中断一次合并 git merge --abort git merge --abort 中断当前的一次合并(还没有合并成功的情况下)
恢复到合并之前 git reset git reset --hard HEAD~ 恢复到合并之前的状态(HEAD回合并前的位置)
  • 查看分支信息: git log --oneline --decorate --graph --all

  • 创建并切换分支: git checkout -b testing

  • 处理合并冲突: git mergetool 然后提示用哪个工具,我这里安装了 vimdiff 。

  • 查看哪些分支被合并到当前分支: git branch --merged

  • 查看哪些分支没有被合并到当前分支: git branch --no-merged

  • 在基于某个分支创建另一个分支: git checkout -b serverfix origin/serverfix ,基于 origin/serverfix 分支创建一个 serverfix 分支,并切换到新创建的 serverfix 分支上。

  • 变基操作步骤:

    git checkout experiment
    git rebase master
    git checkout master
    git merge experiment
    
    # 或者:server 变基到 master上
    git rebase master server
    
    # 变基原则:
    # 总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史,
    # 从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。
    

分支的合并做了哪些事呢?比如,将一个名为 Hotfix 分支合并到当前分支,一般有:

  • 当前分支没有的文件,而hotfix分支有,则将这个文件添加到当前分支。

  • 两个分支修改了相同文件,合并时会提示冲突,通过 git status 查看冲突情况。通过git mergetool 选择一款图形化工具,修改后commit提交即可。

  • 当前分支和 hotfix分支合并一次以后,hotfix 再也没有修改过,这时当前分支和hotfix再做合并操作,无论当前分支做了什么,合并操作则没有任何效果。

  • 将某个A分支合并到当前分支,合并的内容是A分支自上次合并后(如果和当前分支合并过)修改过的文件。

  • 暂存工作(如果修改了文件,突然想切换到其它分支,但又不想执行commit提交,这时需要暂存当前工作):
功能 命令 示例 示例说明
暂存工作 git stash save git stash save 暂存当前工作目录,存储在栈中
暂存列表 git stash list git stash list 查看一下暂存的存储列表
恢复某个暂存 git stash apply git stash apply 也可以指定暂存:git stash apply stash@{2} ,其中stash@{2}通过查看分支列表获得
删除某个暂存 git stash drop git stash drop stash@{0} 删除某个工作暂存

四、信息查看

功能 命令 示例 示例说明
查看提交记录 git log git log 列出所有提交信息
  • git log 命令一些有用的参数:
参数 作用
-p 显示每次提交的内容差异
-2 只显示最近两次提交
--stat 列出被修改过的文件
--pretty=oneline 一行中显示
--graph 通过ASCII 图形表示的分支合并历史

五、打标签

功能 命令 示例 示例说明
创建轻量标签 git tag git tag v1.4 创建一个名为v1.4的标签,没有附加说明信息
创建附注标签 git tag -a git tag -a v1.4 -m 'my version 1.4' -a 和 -m 参数添加了一些说明
后期打标签 git tag -a git tag -a v1.2 9fceb02 9fceb02 可以通过 git log --pretty=oneline 指令查看
查看标签 git show git show v1.4 查看某个标签的具体信息
列出所有标签 git tag git tag 列出所有标签
列出相关标签 git tag -l git tag -l 'v2.*' 列出以 v2. 开头的相关标签
检出标签 git checkout -b git checkout -b version2 v2.0.0 通过创建一个version2分支,将v2.0.0标签检出
共享标签 git push git push origin --tags 将所有的tag标签推送到origin远程仓库
共享标签 git push git push origin v1.4 将v1.4这个tag标签推送到origin远程仓库

六、撤销操作

  • 撤销暂存的文件: git reset HEAD <file> 。有个文件在暂存区中,但你想从暂存区移除这个文件。

  • 覆盖上一次提交: git commit --amend 。在上一次提交以后,发现某个文件没有添加或者多添加了、提交简介写错,重新提交,覆盖上一次提交。注意:要在没有修改文件内容的前提下,上次提交以后紧接着执行才有效,比如:

    git commit -m 'initial commit'
    git add forgotten_file
    git commit --amend
    
  • 撤销对工作区文件的修改: git checkout -- <file> 。从暂存区检出覆盖工作区文件,达到撤销效果。

  • 撤销对暂存区文件的修改: git checkout <commit ID> <file> 。从已提交的文件中,覆盖暂存区和工作区的某个文件,达到撤销的效果。

  • 撤销commit提交git reset HEAD~ 。如果你执行了commit提交命令,但你想撤销这一次commit提交操作。这里通过将HEAD指向提交前的快照来实现撤销效果(HEAD~ 是 HEAD 的父节点,从提交的角度来说,也就是本次提交前的快照)。注:这是下面的 “撤回到任意一次commit提交” 的特例。

  • 撤回到任意一次commit提交: git reset <commit ID> 如果你想撤回到该分支的某次commit上,将后面commit提交的内容舍弃(包括相关的提交历史)。可以通过移动HEAD来达到撤销效果。这里有几个参数:
    git reset --soft <commit ID> 将HEAD指向目标点,不改变暂存区和工作目录。
    git reset --mixed <commit ID> 移动HEAD,改变暂存区,工作目录不变(默认选项,效果和 git reset <commit ID> 一样)。
    git reset --hard <commit ID> 移动HEAD,改变暂存区,工作目录也改变。
    上面说的改变,是指暂存区或者工作目录原来的文件会被删除,取而代之的是,用HEAD重新指向的快照填充覆盖。注:git reflog 命令可以显示我们放弃的commit,也就是reset操作之后,通过 git log 看不到的那些快照。

七、添加忽略文件

  • 忽略文件的名称为 .gitignore

  • GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在 https://github.com/github/gitignore 找到它。

注意事项

  • git 命令中使用通配符 * 号: 比如,我们要log/ 目录下扩展名为 .log 的所有文件,按理来说,应该是:git rm log/*.log 。但是,因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。因此,如果我们想用通配符,要这么写:git rm log/\*.log
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 9,413评论 0 11
  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 12,778评论 1 26
  • 1,查看所有远程分支:%git branch -r 2, 拉取远程分支并创建本地分支git checkout -...
    will666阅读 6,328评论 0 18
  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 11,086评论 1 17
  • 好久没有写过博客了,因为中间工作比较忙,然后有些个人事情所以耽误了。但是之前写的博客还一直有人来问一些问题,有些之...
    winann阅读 30,890评论 18 55

友情链接更多精彩内容