git 教程2 (git常用命令解说)
<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常用命令解说)的更多相关文章
- git日常使用的常用命令总结
git日常使用的常用命令总结 git 是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常 ...
- 图解git中的最常用命令
图解git中的最常用命令 Git命令参考手册(文本版) git init # 初始化本地git仓库(创 ...
- Git使用手册/Git教程:git fetch 将远程仓库的分支及分支最新版本代码拉取到本地
相关文章: 关于验证是否存在ssh配置以及生成SSH Key的方法可以参照文章:Git使用手册:生成SSH Key 关于SSH Key的使用和公钥在gitHub.gitLab的配置等,请参考文章:Gi ...
- Git常用命令解说
http://blog.csdn.net/hangyuanbiyesheng/article/details/6731629 1. Git概念 1.1. Git库中由三部分组成 Gi ...
- 版本控制-Git服务器搭建和常用命令使用
Git是目前世界上最先进的分布式版本控制系统(没有之一).使用Svn的请参考<版本控制-svn服务器搭建和常用命令(centos 6.3)>,下面介绍Git的常用命令 常用命令 简单版 升 ...
- git开发流程、常用命令及工具、TortoiseGit使用及常见问题
根据我最近使用git的一些经历,git是基于分支的版本控制工具,分支有远程分支和本地分支. 一.开发流程 - 从远程服务器的master,clone一份项目文件到本地,然后本地master的基础上br ...
- Git 使用的配置 常用命令
老文一篇 搬过来 1. git的部分配置 # 全局提交用户名与邮箱 git config --global user.name "simon" git config --globa ...
- Git快速入门和常用命令
一.快速入门 本地初始化一个项目 首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中. git config --global us ...
- Git 配置环境及常用命令整理
一.Git教程网站 廖雪峰网站 易百GitHub命令:https://www.yiibai.com/git/git_clone.html 完成Windows环境命令下Git config配置 设置好之 ...
随机推荐
- 转载 - JTable 使用细讲
原文地址:http://hi.baidu.com/jiajiajava/item/1a18431b322fc011e2f986ef JTable是Swing编程中很常用的控件,这里总结了一些常用方法以 ...
- nginx配置文件使用
nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; 全局错误日志定义类型,[ debug | info | notice | warn | error | cri ...
- FPGA 浮点单元设计
浮点数在内存中的存放格式例如以下: 地址 +0 +1 +2 +3 内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 这里 S 代表符号位,1是负,0是正 E 偏移1 ...
- UVa 10290 - {Sum+=i++} to Reach N
题目:给你一个数字问将他写成连续的数字的和的形式.有几种写法. 分析:数论. 设拆成的序列个数为k,我们分两种情况讨论: 1.拆成奇数个连续数.那么设中位数是a,则有n = k * a: 2.拆成偶数 ...
- [ajax 学习笔记] ajax初试
ajax全称是:asynchronous javasctipt and xml. 1.为什么须要ajax? 一般web程序与server的交互是:页面发送请求等待server处理,server处理数据 ...
- 0x66 Tarjan算法与无向图联通性
bzoj1123: [POI2008]BLO poj3694 先e-DCC缩点,此时图就变成了树,树上每一条边都是桥.对于添加边的操作,相当于和树上一条路径构环,导致该路径上所有边都不成为桥.那么找这 ...
- [SCOI 2003] 字符串折叠
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1090 [算法] 区间DP [代码] #include<bits/stdc++. ...
- libhiredis.so.0.13 => not found 缺少
wget https://github.com/redis/hiredis/archive/v0.13.3.tar.gz tar -xzvf v0.13.3.tar.gz cd hiredis- ma ...
- HDU 2520 我是菜鸟我怕谁
2019-05-27 17:52:01 加油!!! 看题时候就要仔细,最后容易忘记%10000 #include <bits/stdc++.h> using namespace std; ...
- Json转换成DataTable
今天看到Json转DataTable的例子,总结一下.... using System; using System.Collections; using System.Collections.Gene ...