美文网首页
01_Git 命令列表

01_Git 命令列表

作者: 秋的懵懂 | 来源:发表于2018-04-21 08:36 被阅读0次

    时间: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

    相关文章

      网友评论

          本文标题:01_Git 命令列表

          本文链接:https://www.haomeiwen.com/subject/tmnqkftx.html