Git浅析
Git浅析
索引
- Git的常用命令
- GitHub的使用
- Git版本创建和回退
- Git的工作区和暂存区
- Git分支管理
1-Git的常用命令
01.创建一个版本库——进入相应的目录
git init
可以看到目录下多了一个.git隐藏目录,这就是版本库目录
02.版本创建
git add filename
git commit -m '版本信息描述'
03.版本记录查看
git log
git log --pretty=oneline
git log --graph --pretty=oneline
# 查看操作记录
git reflog
04.版本回退
git reset --hard HEAD^
git reset --hard HEAD~1
git reset --hard 版本号
05.撤销修改
# 丢弃工作区(你的文件夹目录)的修改
git checkout -- filename
# 放弃暂存区(已经add了)中的修改
git reset HEAD filename
06.对不文件不同
# 查看工作区状态
git status
# 比较工作区中的版本和HEAD版本中文件的不同
git diff HEAD -- filename
# 比较两个区别
git diff 版本1 版本2 -- filename
07.删除文件
# 删除当前目录下的文件
# 如果的确要从版本库中删除
git rm
git commit
08.分支管理
# 查看分支
git branch
# 创建分支
git checkout -b 分支名
# 切换分支
git checkout 分支名
# 合并分支,能用fast forward,就用fast forward
git merge 分支名
# 不采用fast forward模式,会保存分支信息
git merge --no-ff -m '说明信息' 分支名
# 删除分支
git branch -d 分支名
09.保护工作现场
# 存储现场,
git stash
# 恢复现场
git stash pop
10.GitHub
# 克隆项目
git clone 复制过来的地址
# 上传分支
git push origin 分支名称
# 将本地分支跟踪服务器分支
git branch --set-upstream-to=origin/远程分支名称 本地分支名称
# 从远程分支上拉取代码
git pull origin 分支名称
2-GitHub使用
01.创建仓库
注意点:
- 可以勾选上:Initialize this repository with a README
- 可以在Add.gitignore:中选择你的编程语言,这样可以忽略掉一些相应的临时文件
02.添加ssh账户
- 在setting下选择SSH and GPG keys,再选择New SSH key
- 如果某台机器需要与github上的仓库交互,那么就要把这台机器的ssh公钥添加到这个github账户上
Ubuntu下:
- 在ubuntu的命令行中,回到用户的主目录下,编辑文件.gitconfig,修改某台机器的git配置
- 使用如下命令生成ssh密钥
ssh-keygen -t rsa -C "邮箱地址"
- 进入主目录下的.ssh文件件,下面有两个文件。
- 公钥为id_rsa.pub
- 私钥为id_rsa
- 查看公钥内容,复制此内容
- 回到浏览器中,填写标题,粘贴公钥
Windows下
- 打开Git Bash Here
- 输入命令
$ ssh-keygen -t rsa -C "邮箱地址"
# 后面的邮箱即为 github 注册邮箱
回车后让你选择路径建立相应的.ssh文件夹,直接回车建立到默认的用户目录下即可;
中途会让你输入密码
- 该密码是在push文件时要输入的密码;
- 可以不输入直接回车,那么你在push文件时就不需要在输入密码了,而可以直接push到github上
推荐就别输密码了...容易忘,而且每次提交都需要输入,很是麻烦
根据路径提示,到用户目录下的这个.ssh文件夹下,下面有两个文件。
- 公钥为id_rsa.pub
- 私钥为id_rsa
然后GitHub网上相应位置添加(公钥
id_rsa.pub
)一下就可以了验证是否添加成功,输入
$ ssh -T git@github.com
- 第一次输入时会提示如下;
The authenticity of host 'github.com (13.229.188.59)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?- 输入yes即可,若出现如下提示,表示添加成功
Hi zhuChengChao! You've successfully authenticated, but GitHub does not provide shell access.
这方面内容,一下博客写的非常好:
03.克隆项目
- 复制git地址
- 在命令行中复制仓库中的内容
git clone 复制过来的地址
https
和SSH
克隆:https
可以随意克隆项目,但仅限与克隆;SSH
你必须是要克隆项目的管理员或拥有者,且需要添加SSH Key
当添加了SSH账户后,通过ssh克隆时发现,无法clone,问题如下:
Cloning into 'ML-LinearRegrssion'...
ssh_dispatch_run_fatal: Connection to 13.250.177.223 port 22: Software caused connection abort
fatal: Could not read from remote repository. Please make sure you have the correct access rights
and the repository exists.解决:
在bash中输入
eval "$(ssh-agent -s)"
即可网上找了一圈没人解释为什么原因,希望有人能告知:)
04.分支管理
上传分支
- 项目克隆到本地之后,一般性都会创建一个你自己的分支
- 在分支上进行开发,开发完成后添加到暂存区提交
- 推送分支到github上,就是把该分支上的所有本地提交推送到远程库
git push origin 分支名称
将本地分支跟踪服务器分支
git branch --set-upstream-to=origin/远程分支名称 本地分支名称
从远程分支上拉取代码
git pull origin 分支名称
# 使用上述命令会把远程分支上的代码下载并合并到本地所在分支
3-Git版本创建与回退
索引
- 安装与配置
- 创建一个版本库
- 版本创建与回退
01.安装与配置(Linux下)
- 安装命令
sudo apt-get install git
- 安装成功后,运行如下命令
git
02.创建一个版本库
- 在新建的目录下输入终端命令
git init
可以看到目录下多了一个.git隐藏目录,这就是版本库目录
03.版本创建与回退
3.1版本创建
git add filename
git commit -m '版本信息描述'
问题,若上传文件时出现
warning: LF will be replaced by CRLF
的警告:有个写的很好的详细说明如下:https://www.jianshu.com/p/450cd21b36a4
3.2版本记录查看
git log
git log --pretty=oneline
git log --graph --pretty=oneline
第一条命令会显示版本的详细信息
第二条命令会显示版本的简略信息
第二条命令会显示版本的简略信息 且会有提交的顺序图像(推荐使用)
3.3版本回退
- 若要回到上一个版本
git reset --hard HEAD^
其中HEAD表示当前最新版本,HEAD表示当前版本的前一个版本,HEAD^表示当前版本的前前个版本,也可以使用HEAD1表示当前版本的前一个版本,HEAD100表示当前版本的前100版本
- 回到特定的版本号
git reset --hard 版本号
版本号通过
git log
或者git log --pretty=oneline
3.4查看操作记录
git reflog
4-Git的工作区和暂存区
01.工作区
- Working Directory
- 就你工作的目录文件夹
查看工作区状态
git status
02.版本库
- Repository
- 工作区中的.git影藏目录,为git的版本库
- 版本库中存在暂存区和分支
git add
把文件添加到暂存区
git commit
把暂存区中的所有内容提交到当前的分支
03.撤销修改
3.1丢弃工作区的改动
git checkout -- filename
3.2放弃暂存区中的修改
git reset HEAD filename
04.对比文件的不同
# 比较工作区中的版本和HEAD版本中文件的不同
git diff HEAD -- filename
# 比较两个区别
git diff 版本1 版本2 -- filename
05.删除文件
- 当我们删除工作区的某些文件时,git会知道你删除了这些文件
- 此时工作区的版本和版本库中的版本已经不同了
- 选择一:
# 如果的确要从版本库中删除
git rm filename
gir commit -m 'describe infomation'
- 选择二
# 若要恢复,则丢弃工作区中的操作
git checkout -- filename
5-Git分支管理
01.创建分支
- 查看当前的工作分支
#查看当前在哪个分支下工作
git branch
- 主分支
master
,开始是HEAD
指向master
分支 - 创建新分支,再把
HEAD
指向新的分支
# 创建名为dev的分支
git checkout -b dev
# 接下来进行的提交都是在dev这个分支上了
- 切换回
master
分支
git checkout master
02.合并分支
- 当需要合并分支时
git merge 分支名
Fast-forward为“快速合并”模式,也就是直接把master指向dev的当前提交
- 合并完成后可以删除分支
git branch -d 分支名
03.解决冲突
- 当不同分支对于同一个文件都修改了,此时无法采用“快速合并”
- 必须手动解决冲突后在进行提交
- git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
- 修改冲突内容后保存,再进行提交,之后就可以删除相应分支了
分支管理策略
- 合并分支时,git可以用fast forward就用;
- 但是FF模式下,删除分支后,会丢掉分支的信息
- 禁用Fast forward模式
git merge --no-ff -m '说明信息' 分支名
# 这样操作不采用fast forward模式,会保存分支信息
04.BUG分支
- 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
- 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug
- 修复后,再git stash pop,恢复工作现场。
# 存储现场,
git stash
# 恢复现场
git stash pop
Git浅析的更多相关文章
- 20155203 2016-2017-2 《Java程序设计》第1周学习总结
20155203 2016-2017-2 <Java程序设计>第1周学习总结 学习目标 - 了解Java基础知识[第一章] Java是各应用平台的基础,Java分为三大平台:Java三大平 ...
- TortoiseGit使用
TortoiseGit 前言: 其实作为一名学生,还未接触过企业级开发项目,基本都是一个人在本地敲代码,对于项目管理工具使用的并不多,最常用的命令也就是git clone了,hhh: 前些日子了解了一 ...
- Android源码浅析(二)——Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境
Android源码浅析(二)--Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境 接着上篇,上片主要是介绍了一些安装工具的小知识点Andr ...
- IDEA环境下GIT操作浅析之二-idea下分支操作相关命令
上次写到<idea下仓库初始化与文件提交涉及到的基本命令>,今天我们继续写IDEA环境下GIT操作之二--idea下分支操作相关命令以及分支创建与合并. 1.idea 下分支操作相关命令 ...
- IDEA环境下GIT操作浅析之一Idea下仓库初始化与文件提交涉及到的基本命令
目标总括 idea 下通过命令操作文件提交,删除,与更新并推送到github 开源库基本操作idea 下通过命令实现分支的创建与合并操作 idea 下通过图形化方式实现idea 项目版本控制基本操作 ...
- [转帖]Git数据存储的原理浅析
Git数据存储的原理浅析 https://segmentfault.com/a/1190000016320008 写作背景 进来在闲暇的时间里在看一些关系P2P网络的拓扑发现的内容,重点关注了Ma ...
- eclipse上的git命令使用浅析,搭建Maven项目
eclipse上的git命令使用浅析 2016-03-31 14:44 关于eclipse上git的安装和建立代码仓库的文章比较多,但作为一个初识git的人更希望了解每个命令的作用. 当项目连接到 ...
- 浅析git
git是什么 简单来说,Git,它是一个快速的 分布式版本控制系统 (Distributed Version Control System,简称 DVCS) . 同传统的 集中式版本控制系统 (Cen ...
- Mac上使用jenkins+git持续集成浅析
本文旨在让同学们明白如何让jenkis在mac笔记本上运行,并实际与一个最简单的git地址交互并执行简单的jenkins任务,如果学习本文,需要先按照https://www.cnblogs.com/x ...
随机推荐
- Ubuntu / CoreOS修改DNS配置
不要直接手动修改文件 /etc/resolv.conf 安装好Ubuntu之后设置了静态IP地址,再重启后就无法解析域名.想重新设置一下DNS,打开/etc/resolv.conf cat /etc/ ...
- linux系列之:告诉他,他根本不懂kill
目录 简介 使用kill来杀死进程 kill的深入用法 僵尸进程和kill java thread dump 总结 简介 和很多程序员打过交道,这些程序员可能熟知for遍历的好几种写法,但是却对写出来 ...
- JD 评论晒图爬虫
JD 评论晒图爬虫 #coding=utf-8 import requests import re import os __author__ = 'depy' """ j ...
- golang指针接收者和值接收者方法调用笔记
初学go时很多同学会把 值接收者 和 指针接收者 的方法相互调用搞混淆,好多同学都只记得指针类型可以调用值接收者方法和指针接收者方法,而值类型只能调用值接收者方法,其实不然,在某些情况下,值类型也是可 ...
- 第一类值VS第二类值
数据类型的分类:第一类值VS第二类值 第一类值:变量中可以存储函数,也就是说func类似int/double. 第二类值: 1.不能存储函数,不能动态创建函数,不能动态销毁函数; 2.只能存储一个指向 ...
- 使用@EnableConfigurationProperties注册配置Bean时的命名规则
Spring和Spring Boot开发中,常使用@ConfigurationProperties注解某个类,使其实例接受一组具有相同前缀的配置项. 可以使用@Component或Java Confi ...
- zt:我使用过的Linux命令之ar - 创建静态库.a文件
我使用过的Linux命令之ar - 创建静态库.a文件 本文链接:http://codingstandards.iteye.com/blog/1142358 (转载请注明出处) 用途说明 创建静 ...
- 【优化技术专题】「温故而知新」基于Quartz系列的任务调度框架的动态化任务实现分析
不提XXLJOB或者其他的调度框架,就看我接触的第一个任务调度框架Quartz(温故而知新) Quartz的动态暂停 恢复 修改和删除任务 实现动态添加定时任务,先来看一下我们初步要实现的目标效果图, ...
- Django学习day13随堂笔记
每日测验 """ 今日考题 1.什么是django中间件,它的作用是什么,如何自定义中间件,里面有哪些用户可以自定义的方法,这些方法有何特点 2.基于django中间件的 ...
- leetcode 盛水最多的容器 解析
采用双指针法: 主要思想:定义头尾两个指针,分别向中间遍历,当相遇时结束循环.存储每一次遍历容器盛水的最大容量,并不断更新. 盛水的最大容量为 左右指针高度的最小值 乘以 左右指针的距离即宽度. 则可 ...