Git命令整理
说在前面:
刚开始在实习时接触git,是用git可视化工具,但是仅限于克隆库、切换分支、抓取和推送,对于其中的原理不甚了解。看了廖雪峰老师Git教程,获益颇丰。特别要感谢我工作中的同事,是他强烈建议我使用命令行,还在工作中对我悉心指导和讲解,让我体会到了使用命令行的乐趣和Git的强大功能。为了这周不被他鄙视一番,自己也得努力呀!以下的命令行总结是通过学习廖老师的教程总结出来的,为了方便自己查看~~
Git命令行总结:
创建版本库
mkdir
: 在当前目录创建空目录,即空的Git仓库
pwd
: 显示当前目录
git init
: 初始化一个仓库,把当前目录变成Git可以管理的仓库(会产生.git
的目录,这个目录是Git来跟踪管理版本库的,默认隐藏)
ls -ah
: 显示隐藏的目录
git add
: 把文件添加到仓库缓存区(Index),临时保存改动
git add *
: 把所有文件添加到缓存区
git commit -m "wrote a readme file"
: 把文件提交到仓库(HEAD),指向最近一次提交后的结果,但是还没到远端仓库。-m
后面输入的是本次提交的说明
- 为什么Git需要
add
,commit
两步?:因为commit
可以一次提交很多文件(提交到仓库),所以可以add
不同的文件(添加到缓存区)
时光机穿梭
git status
: 查看结果
git diff
: 查看修改的内容
1)版本回退
git log
: 显示从最近到最远的提交日志(其中会带上版本号commit id
,每个人的都不一样)
git log --pretty=oneline
: 显示简单的提交日志
git reset --hard HEAD^
: 回退到上一个版本(HEAD
指向当前版本,HEAD^^
指向上上个版本,HEAD~100
指向之前100个版本)
git reset --hard commit-id
: 恢复到某一个版本(commit id
不必全写,写前几位即可)
git reflog
: 记录操作的每一次命令
2)工作区和暂存区
工作区:在电脑里的目录;版本库:隐藏的.git
目录,Git的版本库里存了很多东西,其中最重要的就是称为stage(index)的暂存区,还有Git为我们自动创建的第一个分支 master
,以及指向master
的一个指针叫HEAD
3) 管理修改
cat readme.txt
: 查看文件内容
git diff HEAD -- readme.txt
: 查看工作区和版本库里面最新版本的区别
- 每次修改,如果不
add
到暂存区,那就不会加入到commit
中
4)撤销修改
git checkout -- file
: 丢弃工作区的修改,即把文件在工作区的修改全部撤销
git reset HEAD file
: 把暂存区的修改撤销掉,重新放回工作区
git reset
: 既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本
5)删除文件
rm file
: 工作区删除文件
git rm file
: 从版本库中删除该文件
git checkout -- file
: 从版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
远程仓库
Git 是分布式版本控制系统,同一个 Git 仓库,可以分布到不同的机器上
ssh-keygen -t rsa -C "youremail@example.com"
: 在用户主目录下创建SSH Key
.ssh
目录里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的密钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉别人
- 为什么GitHub需要SSH Key?:因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
- GitHub允许你在不同电脑上添加多个key。
1)添加远程库(先有本地库,后有远程库)
git remote add origin git@github.com:userName/learngit.git
: 将本地仓库和远程库进行关联。origin
:远程库的名字,这是Git默认的叫法。
git push
: 把当前分支master
推送到远程
git push -u origin master
: 第一次推送master
分支时,由于远程库是空的,加上-u
参数,Git不但会把本地的master
分支内容推送到远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master
: 在第一次推送之后,可以用该命令把本地master
分支的最新修改推送至GitHub
- 分布式版本系统的最大好处之一:在本地工作完全不需要考虑远程库的存在,有无联网都可以正常工作,而SVN在没有联网的时候则不能干活。
- 提示出错信息:fatal: remote origin already exists.——>解决方案:
git remote rm origin
2)从远程库克隆(先有远程库,然后克隆到本地)
git clone git@github.com/userName/gitskills.git
: 克隆一个本地库
- Git支持多种协议,默认的
git://
使用ssh,速度最快,但也可以使用https
等其他协议。 - 使用
https
除了速度慢以外,还有个最大的麻烦就是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh
协议而只能使用https
分支管理
- Git的分支,无论创建、切换和删除,都能在1秒之内完成。无论你的版本库是1个文件还是1万个文件!
1)创建于合并分支
master
是主分支;HEAD
指向master
,即当前分支;master
指向提交,每次提交,master
分支都会向前移动一步,这样,随着你不断提交,master
分支的线也越来越长。- 创建新的分支
dev
:Git新建了一个指针叫dev
,指向master
相同的提交,再把HEAD
指向dev
,就表示当前分支在dev
上。 - 合并分支:把
master
指向dev
的当前提交。 - 合并完分支后,可以删除
dev
分支,即把dev
指针给删除,就只剩下一条master
分支
git branch
: 查看当前分支,会列出所有分支,当前分支前面会标一个*
号
git branch <name>
: 创建分支
git checkout <name>
: 切换分支
git checkout -b <name>
: 创建<name>
分支,然后切换到<name>
分支(创建+切换分支)
git merge <name>
: 合并指定分支()到当前分支(master
)(首先要切换到master
主分支作为当前分支)
git branch -d <name>
: 删除分支
2)解决冲突
git log --graph
: 查看分支合并图
git log --graph --pretty=oneline --abbrev-commit
: 查看简单分支合并图
- 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
- Git用
<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容
3)分支管理策略
通常,合并分支时,如果可能,Git会用
Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用
Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" <name>
: no-ff
参数表示禁用 Fast forward
,可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并。
在实际开发中,我们应该按照几个基本原则进行分支管理:
(1)master分支:应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
(2)dev分支:用来干活的,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
(3)你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
4)Bug分支
- 在Git中,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
git stash
: 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list
: 查看刚才的工作现场
git stash apply
: 回复工作现场
git stash drop
: 删除stash内容
git stash pop
: 回复的同时把stash内容也删了
git stash apply stash@{0}
: 回复指定的stash
5)Feature分支
git branch -D <name>
: 强行删除分支
- 开发一个新feature,最好新建一个分支;
- 如果要丢弃一个没有被合并过的分支,可以通过命令强行删除
6)多人协作
- 当你从远程仓库克隆时,实际上Git自动把本地
master
分支和远程的master
分支对应起来了,并且,远程仓库的默认名称是origin
git remote
: 查看远程库
git remote -v
: 查看更详细的远程库信息
git push origin branch-name
: 推送分支,把该分支上的所有本地提交推送到远程库
- 需要时刻与远程同步的分支:
master
主分支和dev
开发分支
git checkout -b dev origin/dev
: 创建远程origin
的dev
分支到本地
git pull
: 从远程抓取分支
git branch --set-upstram dev orign/branch-name
: 如果git pull
提示“no tracking information”,说明本地分支和远程分支的链接关系没有创建,该命令用于设置branch-name
和origin/branch-name
的链接
标签管理
1)创建标签
git tag <name>
: 用于新建一个标签,默认为HEAD
,也可以指定一个commit id
git tag <name> <commit-id>
: 在对应的commit id上打标签
git tag -a <tagname> -m "blablabla..." 3628164
: 指定标签信息, -a
指定标签名,-m
指定说明文字
git tag -s <tagname> -m "blablabla..." 3628164
: -s
用私钥签名一个标签,可以用PGP签名标签
git tag
: 查看所有标签
git show <tagname>
: 查看标签信息
- 默认标签是打在最新提交的commit上的
- 标签不是按时间顺序列出,而是按字母排序的
2)操作标签
git tag -d <tagname>
: 删除标签
git push origin <tagname>
: 推送某个本地标签到远程
git push origin --tags
: 一次性推送尚未推送到远程的本地标签
git push origin :refs/tags/<tagname>
: 删除一个远程标签
自定义Git
git config --global alias.<alias> <command>
: 给命令<command>
起别名<alias>
- 配置Git的时候,加上
--global
是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。 - 每个仓库的配置文件都放在
.git/config
文件夹中
参考:廖雪峰的官方网站——Git教程 git-cheatsheet.pdf
Git命令整理的更多相关文章
- 常用git命令整理
花了一点时间来熟悉和整理git常用命令. 推荐的git学习资料:1.搜“Git Community Book 中文版.pdf”,git社区书,内容全面且简明扼要,第一推荐2.搜“Git权威指南.pdf ...
- git 命令整理
记录一些git 命令,以便自己以后查阅 基本命令 1.git add (保存工作区的变动到暂存区) git add . 和git add -A把整个工作区添加到暂存区 2.git commit ( ...
- 常用的Git命令整理
之前一直忙于项目苦于没有时间总结,今天刚好有时间特来总结一下在工作中常用到的代码版本管理器Git.至于为什么要用Git?Git相比SVN有哪些好处?我就不多说了,前人已经总结的很好.今天主要介绍的是常 ...
- 代码管理 ,git 命令整理
//先要理解这四个概念,这是一个提交代码的流动轨迹:1.工作区(编辑器)-经过add到2- 2.暂存区 (缓存)- 经过commit3-3.本地仓库 (本地项目)-经过 push4-4.远程仓库 (线 ...
- 常用Git命令大全思维导图
开发中代码管理少不了使用Git,对于初学者来说Git命令的学习是一个难过的坎,为了帮助大家记忆并快速掌握Git的基本使用,我把常用的Git命令整理成思维导图,分享给大家. 高清大图在线预览 http: ...
- (小组)Git 常用命令整理
Git 常用命令整理 取得Git仓库 初始化一个版本仓库 git init Clone远程版本库 git clone git@xbc.me:wordpress.git 添加远程版本库origin,语法 ...
- Git使用:安装,使用及常用命令整理
对于程序猿而言,git是最常接触的工具之一,因此需要熟练快速掌握其技巧. git安装: windwos: [原创]Windows平台下Git的安装与配置 Ubuntu:git与github在ubun ...
- Git常见命令整理
Git常见命令整理 + 注释 git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 gi ...
- Git命令的简单整理大全
创建目录和查看路径 mkdir 创建目录 cd 进入到目录里面pwd 用于显示当前的目录cat 查看文件内容 Git命令使用说明 初始化一个目录成git的仓库(版本库)包括暂存区和ma ...
随机推荐
- Your content must have a ListView whose id attribute is 'android.R.id.list'
修改ListView的ID为 ' @android:id/list ' <ListView android:id="@android:id/list" android:lay ...
- fill_parent和wrap_content的区别
在Android布局文件中定义视图垂直或水平大小: android:layout_width和android_layout_height的属性有fill_parent.wrap_content和mat ...
- 获取图片颜色的rgb,以供css设计背景颜色
ColorPix
- [原创]checkstyle下载与安装
checkstyle是一款功能很强的java静态代码检查工具,为eclipse的插件.在网上看了,大致有两种安装方法.第一种 为联网,在eclipse里输入URL下载:另一种为下载好插件后,离线安装. ...
- HDU 3074 Multiply game(线段树)
单点更新,更新时先除去 原来的数,因为有去摸,可以用乘上逆元代替. //================================================================ ...
- IPTables系列:如何配置Ubuntu 14.04中的IPTables防火墙
IPTables基本命令 在向大家介绍复杂防火墙规则之前,还是先上一些简单的料,让大家对IPTables最为基本的命令有一些简单了解. 首先要说明的是IPTables命令必需以root权限运行,这意味 ...
- 创建ROS功能包(四)
为了方便直接用ROS的create-pkg命令行工具 roscreate-pkg chapter2_tutorials std_msgs rospy roscpp std_msgs 包含了常见的消息类 ...
- checkbox的全选、反选、删除(适配器)
package com.example.adapter; import java.util.List; import com.example.ay.R;import com.example.vo.Fl ...
- greenDao 3.0基础
引入greenDao3.0 首先在project的gradle文件中引入greenDAO插件 dependencies { classpath 'com.android.tools.bui ...
- Android 导入jar包 so模块--导入放置的目录
Android视图下 app目录下的jniLibs 对应Project 视图app下的libs目录 把jar包或者带so文件的文件夹(一般以处理器型号命名如:arbeabi arm64-v8a)复制 ...