Git的模式如图:

git - 简明指南  http://rogerdudler.github.io/git-guide/index.zh.html

Git权威指南 http://www.worldhello.net/gotgit/index.html

Workspace:工作区

Index / Stage:暂存区

Repository:仓库区(或本地仓库)

一、新建代码库

# 查看git版本

Git --version

# 在当前目录新建一个Git代码库

$ git init

# 新建一个目录,将其初始化为Git代码库

$ git init [project-name]

# 下载一个项目和它的整个代码历史

$ git clone [url]

二、配置

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

# 显示当前的Git配置
 $ git config --list  
# 编辑Git配置文件 
$ git config -e [--global] 
 # 设置提交代码时的用户信息 
$ git config [--global] user.name "[name]" 
$ git config [--global] user.email "[email address]"

三、增加/删除文件

# 添加指定文件到暂存区 
$ git add [file1] [file2] ...  
# 添加指定目录到暂存区,包括子目录
 $ git add [dir]  
# 添加当前目录的所有文件到暂存区
 $ git add .  
# 添加每个变化前,都会要求确认
 # 对于同一个文件的多处变化,可以实现分次提交 
$ git add -p 
 # 删除工作区文件,并且将这次删除放入暂存区
 $ git rm [file1] [file2] ... 
 # 停止追踪指定文件,但该文件会保留在工作区
 $ git rm --cached [file]  
# 改名文件,并且将这个改名放入暂存区 
$ git mv [file-original] [file-renamed]

四、代码提交

# 提交暂存区到仓库区 
$ git commit -m [message]  
# 提交暂存区的指定文件到仓库区
 $ git commit [file1] [file2] ... -m [message]  
# 提交工作区自上次commit之后的变化,直接到仓库区
 $ git commit -a  
# 提交时显示所有diff信息 
$ git commit -v  
# 使用一次新的commit,替代上一次提交 
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
 $ git commit --amend -m [message]  
# 重做上一次commit,并包括指定文件的新变化
 $ git commit --amend [file1] [file2] ...

五、分支

# 列出所有本地分支
 $ git branch  
# 列出所有远程分支 
$ git branch -r  
# 列出所有本地分支和远程分支
 $ git branch -a 
 # 新建一个分支,但依然停留在当前分支
 $ git branch [branch-name]  
# 新建一个分支,并切换到该分支
 $ git checkout -b [branch]  
# 新建一个分支,指向指定commit
 $ git branch [branch] [commit] 
 # 新建一个分支,与指定的远程分支建立追踪关系 
$ git branch --track [branch] [remote-branch] 
 # 切换到指定分支,并更新工作区 
$ git checkout [branch-name] 
 # 切换到上一个分支
 $ git checkout -  
# 建立追踪关系,在现有分支与指定的远程分支之间
 $ git branch --set-upstream [branch] [remote-branch] 
 # 合并指定分支到当前分支 
$ git merge [branch] 
 # 选择一个commit,合并进当前分支
 $ git cherry-pick [commit] 
 # 删除分支 $ git branch -d [branch-name] 
 # 删除远程分支
 $ git push origin --delete [branch-name] 
$ git branch -dr [remote/branch]

六、标签

# 列出所有tag 
$ git tag  
# 新建一个tag在当前commit
 $ git tag [tag] 
 # 新建一个tag在指定commit
 $ git tag [tag] [commit]  
# 删除本地tag
 $ git tag -d [tag]  
# 删除远程tag
 $ git push origin :refs/tags/[tagName] 
 # 查看tag信息 
$ git show [tag] 
 # 提交指定tag
 $ git push [remote] [tag]  
# 提交所有tag 
$ git push [remote] --tags  
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

七、查看信息

# 显示有变更的文件
 $ git status 
 # 显示当前分支的版本历史
$ git log  
# 显示commit历史,以及每次commit发生变更的文件 
$ git log --stat  
# 搜索提交历史,根据关键词
 $ git log -S [keyword]  
# 显示某个commit之后的所有变动,每个commit占据一行 
$ git log [tag] HEAD --pretty=format:%s  
# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 
$ git log [tag] HEAD --grep feature  
# 显示某个文件的版本历史,包括文件改名 
$ git log --follow [file] 
$ git whatchanged [file]  
# 显示指定文件相关的每一次diff 
$ git log -p [file]  
# 显示过去5次提交 
$ git log -5 --pretty --oneline  
# 显示所有提交过的用户,按提交次数排序 
$ git shortlog -sn  
# 显示指定文件是什么人在什么时间修改过 
$ git blame [file]  
# 显示暂存区和工作区的代码差异 
$ git diff  
# 显示暂存区和上一个commit的差异 
$ git diff --cached [file]  
# 显示工作区与当前分支最新commit之间的差异 
$ git diff HEAD  
# 显示两次提交之间的差异 
$ git diff [first-branch]...[second-branch]  
# 显示今天你写了多少行代码 
$ git diff --shortstat "@{0 day ago}"  
# 显示某次提交的元数据和内容变化 
$ git show [commit]  
# 显示某次提交发生变化的文件 
$ git show --name-only [commit]  
# 显示某次提交时,某个文件的内容 
$ git show [commit]:[filename]  
# 显示当前分支的最近几次提交 
$ git reflog
# 从本地master拉取代码更新当前分支:branch 一般为master
$ git rebase [branch]

八、远程同步

# 下载远程仓库的所有变动
 $ git fetch [remote] 
 # 显示所有远程仓库 
$ git remote -v  
# 显示某个远程仓库的信息 
$ git remote show [remote]  
# 增加一个新的远程仓库,并命名 
$ git remote add [shortname] [url]  
# 取回远程仓库的变化,并与本地分支合并 
$ git pull [remote] [branch] 
 # 上传本地指定分支到远程仓库 
$ git push [remote] [branch] 
 # 强行推送当前分支到远程仓库,即使有冲突 
$ git push [remote] --force  
# 推送所有分支到远程仓库 
$ git push [remote] –all

#将当前分支推送到origin主机的对应分支。

 $ git push origin **

 

九、撤销

# 恢复暂存区的指定文件到工作区

$ git checkout [file]

# 恢复某个commit的指定文件到暂存区和工作区

$ git checkout [commit] [file]

# 恢复暂存区的所有文件到工作区

$ git checkout .

# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

$ git reset [file]

# 重置暂存区与工作区,与上一次commit保持一致

$ git reset --hard

# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

$ git reset [commit]

# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

$ git reset --hard [commit]

# 重置当前HEAD为指定commit,但保持暂存区和工作区不变

$ git reset --keep [commit]

# 新建一个commit,用来撤销指定commit

# 后者的所有变化都将被前者抵消,并且应用到当前分支

$ git revert [commit]

# 暂时将未提交的变化移除,稍后再移入

$ git stash 

$ git stash pop 

颠覆 Git 命令使用体验的神器 -- tig

tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作,

如 git log, git diff 以及 git blame等, 使用常见安装源能够方便地安装它.

 ubuntu: sudo apt-get install tig
macOS: brew install tig

tig是一种命令行交互式操作工具 tig 的所有功能都是 Git 命令行已经具备的,

tig 提供了一种直观, 方便快捷的 Git 操作.

   在使用 Git 命令的过程中, 最高频的命令应该是 git status, 主要用来查看
staged changes 和 unstaged changes, 通过 tig, 可以很方便的像刚才查看
commit 那样查看 staged changes 和 unstaged changes, 敲 tig 进入 log
界面后, 排在最上面的便是 staged changes 和 unstaged changes, 至此,
staged changes 和 unstaged changes 就像一个 commit 一样被方便地展示出来了
 
tig安装 :
 
1. 安装Homebrew (macOS 缺失的软件包的管理器)

1.1将brew的install文件下载本地

cd ~ && curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install >> brew_install

1.2修改install文件的镜像源

# BREW_REPO = "https://github.com/Homebrew/brew".freeze
BREW_REPO = "git://mirrors.ustc.edu.cn/brew.git".freeze

1.3安装brew

/usr/bin/ruby ~/brew_install

1.4验证是否安装成功

$ brew doctor

如果没成功先卸载brew一下,再试

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
 
2. Mac环境安装通过brew安装tig
 
brew install tig
 
 3.tig命令

安装成功后,在 Repo 文件夹下,输入 【 tig 】+ 【 Enter 】即可进入 tig 模式。此时展现在面前的将会是本地所有的 commit 记录以及分支的演化。

【 j 】【 k 】可上下切换选中的行,【 Enter 】可分屏查看当前 commit 记录详情,【 l 】小写的 L,全屏查看 commit 记录。

【 r 】进入 refs view 模式,查看所有分支,使用 【 j/k 】上下切换, 【 Enter 】查看分支演化。

【 s 】进入 status view,效果同 git status 命令,会展示所有 Untracked 和 UnStaged 文件。 选中 Unstaged 的文件键入【 u 】效果同 git add ,选中 staged 的文件键入 【 u 】效果同 git reset,即撤销 add 操作。【 Enter 】查看分屏查看当前文件的修改记录。

status view 模式下键入 【 C 】进入 vim 编辑器,【 i 】进入编辑模式,在第一行输入 commit 信息,【 :x 】退出并保存。【 m 】查看 commit 记录。

【 c 】进入 stash view 模式,全屏查看修改记录,可配合 【 s 】 使用。

【 t 】进入 tree view 模式,git 目录会以文件夹的形式展示。【 Enter】进入子目录,【 , 】返回上一级目录。

【 m 】进入 main view 查看当前分支的所有 commit 记录,使用 【 j/k 】上下切换,【 回车 】可分屏查看 commit 详情。同样,【 j/k 】上下移动,【空格】翻页。

main view 可以认为是主页。

【 / 】输入关键字可进行搜索。

【 R 】刷新当前页面,可退出搜索的高亮状态。

【 Q 】退出 tig。

【 h 】查看快捷键帮助。

例如:

git status

git add .

git commit --m "test"

tig

git push

tig

如果同事也有提交代码

可以先这样

git stash  (暂存当前修改内容)

git pull --rebase

git stash pop

说明: git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit,

或者另外一种情况,为了fix 一个紧急的bug,  先stash, 使返回到自己上一个commit,

改完bug之后再stash pop, 继续原来的工作。

注意: git pull –rebase 理解

这个命令做了以下内容:

a.把你 commit 到本地仓库的内容,取出来放到暂存区(stash)(这时你的工作区是干净的)

b.然后从远端拉取代码到本地,由于工作区是干净的,所以不会有冲突

c.从暂存区把你之前提交的内容取出来,跟拉下来的代码合并

所以 rebase 在拉代码前要确保你本地工作区是干净的,

如果你本地修改的内容没完全 commit 或者 stash,就会 rebase 失败。

git 创建分支提交远程分支

1,从已有的分支创建新的分支(如从master分支),创建一个dev分支

git checkout -b dev

2,创建完可以查看一下,分支已经切换到dev

git branch

* dev

master

3,提交该分支到远程仓库

git push origin dev

4,测试从远程获取dev

git pull origin dev

或者:

如果用命令行,运行 git fetch,可以将远程分支信息获取到本地,再运行 git checkout -b local-branchname origin/remote_branchname  就可以将远程分支映射到本地命名为local-branchname  的一分支

5,我觉得现在重要的就是设置git push,pull默认的提交获取分支,这样就很方便的使用git push 提交信息或git pull获取信息

git branch --set-upstream-to=origin/dev

取消对master的跟踪

git branch --unset-upstream master

6,现在随便修改一下工程文件的内容,然后git commit ,git push,之后就可以直接提交到远程的dev分支中,而不会是master

其他命令

进入git本地库位置

输入命令行$ git init
可以得到本地库的.get文件路径

输入命令行$ ls -a
此时可以得到本地库位置下的文件列表,会发现里面有.git .gitignore文件

输入命令行$ rm -rf .git
然后再输入命令行$ ls -a,可以发现文件列表内.git文件已不存在

删除本地仓库目录
输入命令行$ rm -rf 本地库位置
本地库位置: ~ 本地库位置 $

Git-分支-分支的新建与合并

https://git-scm.com/book/zh/v2/Git-分支-分支的新建与合并

大神的链接在此:

git

https://www.cnblogs.com/chenwolong/p/GIT.html

tig

https://www.jianshu.com/p/e4ca3030a9d5

git命令的理解与扩展的更多相关文章

  1. git 命令(提高篇)的本质理解

    上一篇博客:[[git 命令(提高篇)的本质理解] (http://www.cnblogs.com/juking/p/7105744.html)]介绍了Git 的基础知识 -- 提交.分支以及在提交树 ...

  2. git 命令(基础篇)的本质理解

    主要命令 1. 提交,git commit 本质:创建一个节点(node),标志了当前位置(node)与以前的node存在不同之处,如下图中的 c0 <-- c1 <-- c2 等等 图中 ...

  3. git合并分支理解和常用命令的总结

    原文参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 工作区和暂存区 工作区 ...

  4. 常用git命令(一)

    git add 命令. 这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等. 将这个命令理解为“添加内容到下一次提交中”而不是“将一 ...

  5. git命令手册

    以下内容是我在学习和研究Git时,对Git操作的特性.重点和注意事项的提取.精练和总结,可以做为Git操作的字典,方便大家查阅: 备注:本文会不断更新完善: 目录 一. 语法格式描述 二. git环境 ...

  6. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  7. 常look的Git命令

    常用的Git命令   命令  简要说明 git add 添加至暂存区 git add–interactive 交互式添加 git apply   应用补丁 git am  应用邮件格式补丁 git a ...

  8. ***Linux下使用git命令及github项目

    在linux下搭建git环境1.创建Github账号,https://github.com2.Linux创建SSH密钥: ssh-keygen  ##一直默认就可以了 3.将公钥加入到Github账户 ...

  9. git使用和理解之一(不含分支)

    0.前言 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 工作区和暂存区: 我们写代码的地方就是工作区,代码写完后, ...

随机推荐

  1. CSS揭秘—灵活的背景图(三)

    前言: 所有实例均来自<CSS揭秘>,该书以平时遇到的疑难杂症为引,提供解决方法,只能说秒极了,再一次刷新了我对CSS的认知 该书只提供了关键CSS代码,虽然有在线示例代码链接,但访问速度 ...

  2. python --- 基数排序算法

    基数排序的方式可以采用LSD,由键值的最右边开始,适用于数值整数.或者MSD,由键值的最左边开始,适用于字符串整数.在LSD基数排序中每一次的处理都是将关键字按顺序放置在其各自的称为桶的数据结构中,而 ...

  3. PMBook - 6.项目进度管理

      6.3 排列活动顺序 6.3.1 排列活动顺序:输入 6.3.1.1 项目管理计划 6.3.1.2 项目文件 6.3.1.3 事业环境因素 6.3.1.4 组织过程资产 6.3.2 排列活动顺序: ...

  4. GetPathFromUri4kitkat【Android 4.4 kitkat以上及以下根据uri获取路径的方法】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 在Android4.4之前和之后,通过Intent调用文件管理器选择文件,获取的文件uri地址形式是不同的. Android6.0 ...

  5. Java基础知识回顾之六 ----- IO流

    前言 在上一篇文章中,回顾了Java的多线程.而在本篇文章中主要介绍Java IO的相关知识. IO的介绍 什么是IO? IO的名称又来是Input与Output的缩写,也就是输入流和输出流.输入流用 ...

  6. 学习ASP.NET Core Razor 编程系列十八——并发解决方案

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  7. matplotlib与numpy

    import matplotlib.pyplot as pltimport numpy as np y = df.loc[0:100, 4].valuesy = np.where(y == 'Iris ...

  8. SqlServer注意事项总结,高级程序员必背!

    本篇文章主要介绍SqlServer使用时的注意事项. 想成为一个高级程序员,数据库的使用是必须要会的.而数据库的使用纯熟程度,也侧面反映了一个开发的水平. 下面介绍SqlServer在使用和设计的过程 ...

  9. Java基础系列-Comparable和Comparator

    原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述         Java中的排序是由Comparable和Comparator这两个接 ...

  10. 常见js报错

    1Uncaught TypeError: Cannot read property 'length' of null Uncaught TypeError: Cannot read property ...