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. Ubuntu 18.04.1 LTS + kolla-ansible 部署 openstack Rocky all-in-one 环境

    1. kolla 项目介绍 简介 kolla 的使命是为 openstack 云平台提供生产级别的.开箱即用的自动化部署能力. kolla 要实现 openetack 部署分为两步,第一步是制作 do ...

  2. python接口自动化(四)--接口测试工具介绍(详解)

    简介 “工欲善其事必先利其器”,通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进行接口测试,能够提供 ...

  3. JS ES6的变量的结构赋值

    变量的结构赋值用户很多 1.交换变量的值 let x = 1; let y = 2; [x,y] = [y,x] 上面的代码交换变量x和变量y的值,这样的写法不仅简洁,易读,语义非常清晰 2.从函数返 ...

  4. 【WebGIS系列】Typescript+WebGL+Webpack开发环境搭建

    目前Web实现矢量渲染的主流技术包括SVG.VML和WebGL.相对而言,VML是一种较古老的技术,虽然未成为W3C标准,但被早期的IE浏览器(IE9以下)和微软Office广泛使用,目前已经远离了浏 ...

  5. Flink的分布式缓存

    分布式缓存 Flink提供了一个分布式缓存,类似于hadoop,可以使用户在并行函数中很方便的读取本地文件,并把它放在taskmanager节点中,防止task重复拉取.此缓存的工作机制如下:程序注册 ...

  6. C# 提前异步加载数据

    前言 在我们应用程序中,如果有较大的数据需要从数据库或者本地读取,且是一次性的话,可以提前获取数据并缓存在内存中. 一般处理方法:利用应用程序启动到用户使用功能这一段时间,提前加载数据. 问题来了,因 ...

  7. 从QA到工程能效团队

    Engineering Productivity Productivity is our job; testing and quality are the job of everyone involv ...

  8. 中文命名之Hibernate+MySQL演示

    最近有个契机, 需要在一个给定开发环境中验证中文命名的可行性. 达成的例子源码在: HibernateExampleZh 当前用的是Hibernate 3.3.2.GA. 之后测试了更多版本, 彩蛋见 ...

  9. 责任链模式 职责链模式 Chain of Responsibility Pattern 行为型 设计模式(十七)

    责任链模式(Chain of Responsibility Pattern) 职责链模式 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这些对象连接成一条链,并沿着这 ...

  10. vue学习之ajax 简单快速使用axios

    vue2.x 推荐使用axios 1.首先使用安装 npm install axios -S 2.在哪用在哪引入 import axios from 'axios' 或则在main.js 中引入 在申 ...