Git命令整理
来源:互联网 发布:html5 css3实例源码 编辑:程序博客网 时间:2024/06/09 23:50
廖雪峰老师的git教程笔记,网址
Git简介
- 概念:分布式版本控制系统。
集中式:CVS, SVN
从中央服务器获取内容,完成任务后再推送给中央服务器。缺点:必须联网,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,就会很难受; 依赖于中央服务器。分布式:Git
没有中央服务器,每个人的电脑都是一个完整的版本库。多人协作时,只需要把各自的修改推送给对方就可以了。
安装Git
- Linux
Ubuntu或者Debian,输入命令sudo apt-get install git
, 其他版本的Linux安装git,需要先从git官网下载源码,解压后,依次输入./config
,make
,sudo make install
来进行安装。 Windows
安装msysgit是Windows版的Git,从https://git-for-windows.github.io下载,然后按默认选项安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!设置git
安装完成后,还需要最后一步设置,在命令行输入:$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"
$ git config --global color.ui true
让git显示颜色
具体的配置可以参考自定义git
版本仓库
本地版本库
初始化一个Git仓库,使用git init
命令。
添加文件到Git仓库,分两步:
- 第一步,使用命令
git add <file>
,注意,可反复多次使用,添加多个文件; - 第二步,使用命令
git commit -m "message"
,提交多次添加的内容,-m
后面的信息是修改的内容。
远程仓库
注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
- 第1步:创建
SSH Key
。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key
:
$ ssh-keygen -t rsa -C "youremail@example.com"
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key
的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
- 第2步:登陆GitHub,打开“Account settings”,“SSH Keys” 页面:
然后,点“Add SSH Key”,填上任意Title,在Key
文本框里粘贴id_rsa.pub
文件的内容。
添加远程仓库和克隆
- 在你的github上创建一个仓库,仓库名跟本地仓库一致
git remote add origin your repository address
关联远程仓库,origin
是Git默认的远程仓库的名字,后面的内容是github上面的仓库地址,例如ssh类型: git@github.com:XueqiangChen/Thinking_in_java.git
或者https形式:https://github.com/XueqiangChen/Thinking_in_java.git
git push -u origin master
关联成功后,使用该命令第一次推送master分支的所有内容- 此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master
推送最新修改 - 克隆远程仓库:
git clone 远程仓库ssh/https地址
工作区与暂存区
- 工作区:就是你在电脑下能看到的目录,比如
learngit
文件夹就是一个工作区。 - 版本库:工作区有一个隐藏目录
.git
,这个不算工作区,而是Git的版本库。 - 暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
git add
操作命令是将内容保存到暂存区,,多次添加,添加的内容都在暂存区中。git commit
的命令会将暂存区中的内容一次性提交到分支,暂存区中就没有内容了。
版本回退
git
中每次提交一个版本,就会把他们串成一条时间线。Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向不同的版本,然后顺便把工作区的文件更新了。所以head
指针在哪里,当前的版本就是哪一个。
git reset --hard HEAD^
从当前版本回退到上一个版本,上上一个版本可以使用HEAD^^
,回退100个版本,可以写成HEAD~100
git reset --hard 3628164
前进到下一个版本,后面的数字指的是版本号,在git reflog
中可以查找到
撤销修改
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file
。 - 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD file
,就回到了场景1,第二步按场景1操作。 - 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除
git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,可以通过git checkout -- file
来还原,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
查看命令
git status
查看当前仓库的状态,可以知道有哪些文件被修改过,待添加的文件git diff
查看修改的具体内容git log
查看历史记录,可以查看到最近到最远的记录,默认显示三条记录git log --pretty=oneline
简化历史记录的显示信息,使显示内容放在一行,显示的内容里有类似d416...ebb9
这样的字符串,指的是commit id
,每次提交都会产生一个idgit reflog
查看你使用过的每一个命令,可以帮助进行版本的前进git diff HEAD -- readme.txt
命令可以查看工作区和版本库里面最新版本的区别
分支管理
分支的创建与合并
git branch
查看当前分支
$ git branch * master *表示的是当前分支git branch <name>
创建分支git checkout <name>
切换分支git checkout -b <name>
创建加切换分支git merge <name>
合并某分支到当前分支git branch -d <name>
删除分支git branch -D <name>
如果要丢弃一个没有被合并过的分支,可以通过该命令强行删除
解决冲突
在两个分支上修改同一个文件后,想要合并这两个分支,就会出现冲突的现象,为了顺利合并分支,需要通过查看不同分支的修改内容,去除重复或者不需要的内容来合并分支。
git log --graph
命令可以看到分支合并图。git log --graph --pretty=oneline --abbrev-commit
查看具体的分支合并情况
分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev
表示在分支合并时禁用Fast forward模式
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
Bug修复
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
git stash
把当前的工作现场“储藏”起来,等以后恢复现场后继续工作git stash list
查看保存的工作现场git stash apply 指定保存的工作现场
恢复工作内容,但是不删除缓存的stashgit stash drop
删除缓存的工作现场内容git stash poop
恢复工作内容的同时删除stash的内容
多人协作
git remote -v
查看远程库的详细信息;- 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用
git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交; - 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致; - 如果git pull提示”no tracking information”, 就需要建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
; - 从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突。
标签管理
git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit idgit tag
查看所有标签git tag -a <tagname> -m "blablabla..."
可以指定标签信息git tag -s <tagname> -m "blablabla..."
可以用PGP签名标签git show <tagname>
查看标签信息git tag -d <tagname>
删除标签git push origin <tagname>
推送某个标签到远程git push origin --tags
一次性推送全部尚未推送到远程的本地标签- 如果标签已经推送到远程,先从本地删除,然后从远程删除,使用
git push origin :refs/tags/<tagname>
命令
Git Cheat Sheet
参考文档Git Cheat Sheet
声明
- 本站网址:http://chenxq.me
- 联系作者 @Chenxq
- 如需转载,请先阅读 「 ©️版权声明 」
- GIT命令整理
- 常用git命令整理
- Git基本命令整理
- 常用git命令整理
- Git命令整理
- Git基本命令整理
- git命令整理
- Git使用命令整理
- Git命令整理
- git使用命令整理
- git 基本命令整理
- git命令整理
- git命令整理
- git基础命令整理
- GIT命令整理
- git操作命令整理
- Git命令整理
- Git 简单命令整理
- Centos 安装配置jdk
- 整形数组合并
- easyUI常用属性
- mr的shuffle过程
- java基础_java程序结构及简单面向对象
- Git命令整理
- 大三小结
- 【源码分享】jquery+css实现侧边导航栏
- centos7下安装mongodb和php扩展mongodb
- 设计模式读书笔记(一)设计模式6原则
- css3中强大的filter(滤镜)属性
- 关于FileOpen2插件安装apk时闪退的解决办法
- 实现JS复制、粘贴,Chrome/Firefox下可用
- 处理ViewPager嵌套ViewPager的滑动事件冲突