<1>$ git -- help (调出git的帮助文档)

<2>$ git +命令 --help (查看某个具体命令的帮助文档)

<3>$ git --version (查看git版本号)

<4>$ git init (生成空的本地仓库)

<5>$ git add <file>(将文件添加到暂存区)

<6>$ git commit (将暂存区里的文件提交到本地仓库)

<7>$ git commi -m <message>(-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。)

<8>初次commit 之前,需要配置用户邮箱及用户名,使用以下命令:

$ git config --global user.email ''you@example.com''

$ git config --global user.name ''Your Name''

<9>文件状态
新建文件状态为untracked
使用git add 命令将新建文件加入到暂存区,文件状态变为staged
使用git commit 命令将暂存区的文件提交到本地仓库,状态变为Unmodified
如果对Unmodified状态的文件进行修改,状态变为modified
如果对Unmodified状态的文件进行git rm 操作,其状态回到untracked状态

<10>$ git log (显示从最近到最远的提交日志)
(1)git log命令显示的信息的具体含义:
commit 4a70ceb24b6849ad830d6af5126c9227b333d2d1 --通过算法SHA-1计算出的校验和也叫commit id
Author: wiggin <wiggin@gmail.com> --作者跟邮箱概要信息
Date: Wed May 16 23:51:02 2018 +0800 --提交时间
还有--commit 的时候,使用-m选项所写的一段概要说明

(2)$ git log -n (表示查看最近的n次提交)
(3)$ git log -p (显示提交的不同点)
(4)$ git log --author 查看具体某个作者的提交
(5)$ git log --pretty=oneline (简化的日志)
(6)$git log --graph (以一个简单的线图串联整个提交历史)

<11>$ git diff (用于比较差异)

diff -->difference的缩写,用于比较差异
使用场景:
1、解决冲突
2、制作补丁
(1)$ git diff 不加任何参数 (用于比较当前工作区跟暂存区的差异)
(2)$ git diff --cached 或者--staged (比较暂存区与最新本地版本库)
(3)$ git diff HEAD (比较工作区与最新本地版本库)
(4)$ git diff 分支名 (查看当前分支跟指定分支的差异)
(5)$ git diff 分支名1 分支名2 (查看两个指定分支(已提交的文件)的差异,分支2 跟分支1的差别)
(6)$ git diff 文件名 (查看指定文件的差异)
(7)$ git diff commitid1 commitid2 (用于列出两个历史提交的差异)
(8)$ git diff --stat (用于罗列有变更的文件)
(9)$ git diff输出信息的具体含义如下:

diff --git a/file2 b/file2 file2的两个版本
index c200906..29e2b3c 100644
--- a/file2 表示变更前的文件
+++ b/file2 表示当前文件
@@ -1 +1,2 @@ 变更前的文件的第一行与变更之后的文件的第一行往下两行,这块文件区域有差异
222
+111 +表示新增了一行 -表示删除了一行 如果对一行内容进行修改,在此处体现出来的就是先删除一行,再新增一行

<12>$ git reset
使用场景:版本回滚
(1)$ git reset HEAD 文件名 移除不必要的添加到暂存区的文件
(2)$ git reset HEAD^ 或者 commitid 去掉上一次的提交
(3)$ git reset --soft HEAD^ 修改上次提交的描述信息,即修改commit -m "修改这里的内容"
(4)$git reset --soft 只是将HEAD引用指向指定的提交,工作区跟暂存区的内容不会改变
(5)$git reset --mixed (默认选项)将HEAD指向指定的提交,暂存区的内容随之改变,工作区内容不变
(6)$git reset --hard 将HEAD指向指定的提交,暂存区跟工作区都会改变
(7)$ git reset --hard HEAD^ (回滚到上个版本)
(8)$ git reset -- hard +commit id 前几位 (回滚到指定版本号)
(9)$git reset (–mixed) HEAD~1 回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响)
(10)$git reset –soft HEAD~1 回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响)
(11)git reset –hard HEAD~1 回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换
简单总结一下,其实就是--soft 、--mixed以及--hard是三个恢复等级。使用--soft就仅仅将头指针恢复,已经add的缓存以及工作空间的所有东西都不变。
如果使用--mixed,就将头恢复掉,已经add的缓存也会丢失掉,工作空间的代码什么的是不变的。如果使用--hard,那么一切就全都恢复了,头变,aad的缓存消失,代码什么的也恢复到以前状态。

<13>$ git reflog (查看历史命令)

<14>$ git status (查看缓冲区状态)

<15>$git rm (用于git文件的删除操作)
$ git rm --cache filename 仅删除暂存区里的文件,在工作区该文件仍然存在
$ git rm filename 命令如果不加 --cache 会删除工作区里的文件,并提交到暂存区,此时暂存区也无该文件

<16>$ git checkout -- file (丢掉工作区的修改)
注意(1)$ git checkout filename 即git checkout 直接加文件名是从暂存区将文件恢复到工作区,如果工作区已经存在该文件,则会选择覆盖该文件
(2)$ git checkout <branch name> <filename> 即$ git checkout 加分支名 + 文件名则表示从分支<branch name>拉取文件,并覆盖工作区文件
(3)文件已修改,未add到暂存区:$ git checkout -- file可还原工作区文件
(4)文件已修改,并add到暂存区未commit:$ git read HEAD file $ git checkout -- file两条命令可还原工作区文件

<17>$ ssh -keygen -t rsa -C "799583930@qq.com" (创建SHH KEY)

<18>$ git remote add origin git@server-name:path/repo-name.git (关联远程仓库repo-name)

<19>$ git push -u origin master (第一次推送分支master内容)

<20>此后,每次本地提交后,只要有必要,就可以使用命令$ git push origin master推送最新修改;

<21>$ git clone git@github.com:enjoyzier/gitskills.git (克隆github仓库,注意:要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。)

<22>$ git branch (查看所有分支)

<23>$git branch <name> (创建分支)

<24>$ git checkout <name> (切换分支,如果在分支上面对文件进行修改之后,没有commit就切换到另一个分支,这个时候会报错,因为没有commit的文件在切换分支之后会被覆盖,所以git会报错提示)

<25>$ git checkout -f <name> (强制切换分支,如果当前有未提交的变更,会直接丢弃
-f 参数一定一定要非常非常小心使用,一般情况下不建议使用,除非真的要强制去执行)

<26>$ git checkout -b <name> (git checkout命令加上-b参数表示创建并切换分支,相当于以下两条命令:
$ git branch <name>
$ git checkout <name>)

<27>$ git merge <name> (合并指定分支到当前分支)

<28>$ git branch -d <name> (删除分支,不能删除当前所在的分支)

<29>$ git branch -m <oldname> <newname> (更改分支名)

<30> 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

<31>$ git log --graph --pretty=oneline --abbrev-commit (看到分支合并图。)

<32>在实际开发中,我们应该按照几个基本原则进行分支管理:首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

<33>$ git merge --no-ff -m "merge with no-ff" <name> (合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。)

<34>$ git tag (标签相关命令)
(1)$ git tag 不加任何参数,表示显示标签列表(按字母顺序,非时间顺序)
(2)$ git tag <tagname> (默认给最近的一个提交打上标签)
(3)$ git tag <tagname> <commit_id> (给commit_id指定的提交打上标签)
(4)$ git show <tagname> (显示该标签相关的那次提交的相关信息)
(5)$ git tag -d <tagname> (删除该标签)
(6)$ git push <远程分支名> <标签名> (把某个标签(必须是本地已经存在的标签,否则推送失败)推送到远程服务器上)
(7)删除远程标签的步骤
先删除本地的标签git tag -d 标签名,再删除远程的标签 git push origin :refs/tags/标签名
注意:标签与commit挂钩,只要commit存在于多个分支,那么这几个分支都能看见这个标签

<35>修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

<36>$ git stash (保存工作现场)

<37>$ git stash list (查看工作现场列表)

<38>$ git stash pop (恢复工作现场,恢复的同时删除stash内容)

<39>$ git stash apply <stash id> (你可以多次stash,恢复的时候,先用git stash list查看stash列表,然后用命令git stash apply <stash id>恢复指定的stash)

<40>开发一个新feature,最好新建一个分支;如果要丢弃一个没有被合并过的分支,可以通过$ git branch -D <name>强行删除。

<41>多人协作的工作模式:

首先,可以试图用$ git push origin <branch-name>推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

<42>$ git remote -v (查看远程仓库信息)

<43>本地新建的分支如果不推送到远程,对其他人就是不可见的

<44>从本地推送分支,使用$ git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交

<45>$ git fetch拉取远程仓库的变更到本地仓库

<46>git pull 不建议使用 等同于fetch之后merge

<47>在本地创建和远程分支对应的分支,使用$ git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

<48>建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

<49>从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

<50>使用.gitignore文件
(1)为什么要使用.gitignore 文件?
大量与项目无关的文件全推到远程仓库上,同步的时候会非常慢,且跟编辑器相关的一些配置推上去之后,别人更新也会受其影响。所以,我们使用该文件,对不必要的文件进行忽略,使其不被git追踪

一般情况下,.gitignore文件,在项目一开始创建的时候就创建,并推送到远程服务器上。这样大家初次同步项目的时候,就是用到该文件,避免以后,团队成员把与项目无关的文件,传到远程服务器上

*.log 表示忽略项目中所有以.log结尾的文件
123?.log 表示忽略项目中所有以123加任意字符的文件
/error.log 表示忽略项目中根目录中的error.log 这个文件
src/main/test/* 表示忽略/src/main/test/目录下的所有文件
*.class
**/java/ 匹配所有java目录下的所有文件
!/error.log 表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定

(2)对于已经提交到远程或本地仓库的文件,.gitignore配置之后不会生效。我们必须先删除本地暂存区里的文件,之后再加上.gitignore 文件,最后再把变更提交到远程仓库上。
git rm --cached 文件名 从暂存区删除某个文件
git rm -rf --cached 文件夹 表示递归删除暂存区该文件夹的所有东西

git 教程2 (git常用命令解说)的更多相关文章

  1. git日常使用的常用命令总结

    git日常使用的常用命令总结 git 是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常 ...

  2. 图解git中的最常用命令

    图解git中的最常用命令 Git命令参考手册(文本版) git init                                                  # 初始化本地git仓库(创 ...

  3. Git使用手册/Git教程:git fetch 将远程仓库的分支及分支最新版本代码拉取到本地

    相关文章: 关于验证是否存在ssh配置以及生成SSH Key的方法可以参照文章:Git使用手册:生成SSH Key 关于SSH Key的使用和公钥在gitHub.gitLab的配置等,请参考文章:Gi ...

  4. Git常用命令解说

    http://blog.csdn.net/hangyuanbiyesheng/article/details/6731629 1. Git概念  1.1. Git库中由三部分组成         Gi ...

  5. 版本控制-Git服务器搭建和常用命令使用

    Git是目前世界上最先进的分布式版本控制系统(没有之一).使用Svn的请参考<版本控制-svn服务器搭建和常用命令(centos 6.3)>,下面介绍Git的常用命令 常用命令 简单版 升 ...

  6. git开发流程、常用命令及工具、TortoiseGit使用及常见问题

    根据我最近使用git的一些经历,git是基于分支的版本控制工具,分支有远程分支和本地分支. 一.开发流程 - 从远程服务器的master,clone一份项目文件到本地,然后本地master的基础上br ...

  7. Git 使用的配置 常用命令

    老文一篇 搬过来 1. git的部分配置 # 全局提交用户名与邮箱 git config --global user.name "simon" git config --globa ...

  8. Git快速入门和常用命令

    一.快速入门 本地初始化一个项目 首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中. git config --global us ...

  9. Git 配置环境及常用命令整理

    一.Git教程网站 廖雪峰网站 易百GitHub命令:https://www.yiibai.com/git/git_clone.html 完成Windows环境命令下Git config配置 设置好之 ...

随机推荐

  1. Linux查看 kennel , 物理CPU个数、核数、逻辑CPU个数

    other article on my list: 查看进程 https://i.cnblogs.com/PostDone.aspx?postid=9231604&actiontip=%E4% ...

  2. 【ACM】nyoj_139_我排第几个_201308062046

    我排第几个时间限制:1000 ms  |  内存限制:65535 KB 难度:3描述 现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排 ...

  3. emacs 搭建racket开发环境

    emacs 搭建racket开发环境 emacs下搭建开发racket的环境,笔者之前用过下面两种模式:geiser和racket-mode.相对而言,后一种方式要显得简单.本文主要介绍后一种方式环境 ...

  4. sikuli运行错误:Traceback (most recent call last):

    错误信息: Traceback (most recent call last): File "C:\Users\wb-cailu.a\AppData\Local\Temp\sikuli-tm ...

  5. [BZOJ 1579] Revamping Trails

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1579 [算法] dist[u][k]表示当前在点u,升级了k条道路,最短路径的长度 ...

  6. 【NOIP 2004】 虫食算

    [题目链接] https://www.luogu.org/problemnew/show/P1092 [算法] 搜索 + 剪枝 直接搜索显然会超时,考虑剪枝 1 : 优化搜索顺序 2 : 假设我们已经 ...

  7. EOJ 2844 排序去重

    有 n 个 1 到 1000 之间的整数 (1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉.然后再按照指定的排序方式把这些数排序. Input 第 1 行为字母 A 或 D,A ...

  8. C++_class_powerpoint_1.1

    Types and Declarations Boolean Type bool type – boolean , logic type bool literal – true, falseint a ...

  9. Spring MVC简介 2.5 Spring MVC执行的流程

    package org.fkit.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http ...

  10. BPM中字段查重,C#Ajac调用示例

    BPM中字段查重记录: 这也算是一个C#调用Ajax的示例吧,如果是异步加载的话async: false去掉就可以了. 需求:比如现在要录入一些信息,但是,有一个字段不能重复,BPM表都是自己生成的, ...