Ubuntu系统下Git的使用
-----------------------------------------------------Git安装---------------------------------------------------
可以输入git,看看系统有没有安装Git,没有安装会提示,如下:
Theprogram 'git' is currently not installed. You can install it bytyping:
sudoapt-get install git
安装Git:sudoapt-get install git
安装Git之后需要配置用户信息:
gitconfig --global user.name "Your Name"
gitconfig --global user.email "you@example.com"
---------------------------------------------------SSH密钥注册---------------------------------------------
官网生成密钥命令:ssh-keygen-t rsa -C "$your_email"
第一步生成密钥:
ssh-keygen-t rsa -C "shijinwen@ltbl.cn"
说明:如果一切顺利的话,可以在用户主目录(/home/yourhost name/)里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSHKey的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥
第二步找到id_rsa.pub文件,将文件内容复制到github的ssh管理中(新建SSH密钥)
catid_rsa.pub /gedit id_rsa.pub
--------------------------------------------Git克隆项目----------------------------------------------
克隆项目:
gitclone git@192.168.100.22:Romaker/Romaker-Admin.git
克隆项目某个分支:
gitclone -b 分支名称git@192.168.100.22:Romaker/Romaker-Admin.git
//第一步:gitclone 项目地址 //克隆项目
//第二步:cd进入下载目录 //如果项目不位于主分支,则必须进入下载目录然后切换分支下载
//第三步:gitcheckout --track origin/dev //切换分支,检出分支内容
-----------------------------------------------Git更新项目---------------------------------------------------
1.git pull //更新代码
-----------------------------------------------Git提交代码---------------------------------------------------
第一步,用命令gitadd(gitrm)把文件添加到仓库:
gitadd 文件名称(或文件目录)[添加修改] 或 gitrm 文件名(或文件目录)[删除]
提交当前目录下所有文件:gitadd ./
第二步,用命令gitcommit把文件提交到仓库:
gitcommit -m "注释内容"
第三步,用命令gitpush 把文件推送到git服务器:
gitpush -u origin sjw(分支名称)
说明:提交新增跟提交修改是同样的步骤
------------------------------------------------Git关联远程库----------------------------------------------
要关联一个远程库,使用命令gitremote add origin git@server-name:path/repo-name.git;
关联后,使用命令gitpush -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令gitpush origin master推送最新修改;
----------------------------------------------------Git分支管理-----------------------------------------------
创建并切换到dev分支:gitcheckout -b dev
说明:gitcheckout命令加上-b参数表示创建并切换,相当于以下两条命令:
gitbranch dev //创建
gitcheckout dev //切换
查看当前分支:gitbranch //gitbranch命令会列出所有分支,当前分支前面会标一个*号
合并分支:gitmerge dev
删除分支:gitbranch -d dev
查看分支合并图:gitlog --graph
查看分支:gitbranch
创建分支:gitbranch <name>
切换分支:gitcheckout <name>
创建+切换分支:gitcheckout -b <name>
合并某分支到当前分支:gitmerge <name>
删除分支:gitbranch -d <name>
-------------------------------------------------GitBug分支--------------------------------------------
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
$git status
#On branch dev
#Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: hello.py
#
#Changes not staged for commit:
# (use "git add <file>..." to update what will becommitted)
# (use "git checkout -- <file>..." to discard changesin working directory)
#
# modified: readme.txt
#
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$git stash
Savedworking directory and index state WIP on dev: 6224937 add merge
HEADis now at 6224937 add merge
现在,用gitstatus查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
$git checkout master
Switchedto branch 'master'
Yourbranch is ahead of 'origin/master' by 6 commits.
$git checkout -b issue-101
Switchedto a new branch 'issue-101'
现在修复bug,需要把“Gitis free software ...”改为“Gitis a free software ...”,然后提交:
$git add readme.txt
$git commit -m "fix bug 101"
[issue-101cc17032] fix bug 101
1file changed, 1 insertion(+), 1 deletion(-)
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
$git checkout master
Switchedto branch 'master'
Yourbranch is ahead of 'origin/master' by 2 commits.
$git merge --no-ff -m "merged bug fix 101" issue-101
Mergemade by the 'recursive' strategy.
readme.txt| 2 +-
1file changed, 1 insertion(+), 1 deletion(-)
$gitbranch -d issue-101
Deletedbranch issue-101 (was cc17032).
太棒了,原计划两个小时的bug修复只花了5分钟!现在,是时候接着回到dev分支干活了!
$git checkout dev
Switchedto branch 'dev'
$git status
#On branch dev
nothingto commit (working directory clean)
工作区是干净的,刚才的工作现场存到哪去了?用gitstash list命令看看:
$gitstash list
stash@{0}:WIP on dev: 6224937 add merge
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用gitstash apply恢复,但是恢复后,stash内容并不删除,你需要用gitstash drop来删除;
另一种方式是用gitstash pop,恢复的同时把stash内容也删了:
$git stash pop
#On branch dev
#Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: hello.py
#
#Changes not staged for commit:
# (use "git add <file>..." to update what will becommitted)
# (use "git checkout -- <file>..." to discard changesin working directory)
#
# modified: readme.txt
#
Droppedrefs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)
再用gitstash list查看,就看不到任何stash内容了:
$git stash list
你可以多次stash,恢复的时候,先用gitstash list查看,然后恢复指定的stash,用命令:
$gitstash apply stash@{0}
-------------------------------------------------Git常用命令汇总--------------------------------------------
查看当前项目的分支信息:gitremote show origin
声明分支:gitbranchsjw(分支名) //项目有多个分支存在的情况,可以声明分支,然后切换分支就可以用gitstatus 对比本地代码文件改动了
切换分支:gitcheckoutsjw(分支名)
查看文件状态:gitstatus
查看文件修改内容:gitdiff文件名
查看提交日志:gitlog --pretty=oneline 显示从近到远的提交日志列表
回退到某个版本:gitreset --hard HEAD^ HEAD~100意思是往上回滚100个版本
gitreset --hard版本id 回滚到指定版本
查看命令历史:gitreflog
查看工作区和版本库里面最新版本的区别:gitdiff HEAD -- readme.txt
丢弃工作区文件修改:gitcheckout -- file(文件名)
说明:命令gitcheckout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是:readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是:readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次gitcommit或gitadd时的状态。
丢弃暂存区的修改,重新放回工作区:gitreset HEAD file
总结:gitcheckout -- file其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
从版本库删除文件:gitrm file
//1. git add . //往暂存区域添加已添加和修改的文件,不处理删除的文件
//2. git status //比较本地数据目录与暂存区域的变化
//3. git commit -m "commit directions" //提到代码到本地数据目录,并添加提交说明
------------------------------------------------Ubuntu常用命令---------------------------------------------
查询系统历史命令信息:history
创建目录:mkdir
删除空目录:rmdir
删除非空目录:rm-rf 目录or文件
创建文件:touch文件
查看文件:cat
编辑文件:gedit
查看文件列表:ls-la
查看当前工作目录:pwd
----------------------------------创建版本库------------------------------------
Git全局设置
gitconfig --global user.name "石锦文"
gitconfig --global user.email "shijinwen@ltbl.cn"
创建新版本库
mkdirphpTest
cdphpTest
gitinit
touchREADME.md
gitadd README.md
gitcommit -m "first commit"
gitremote add origin git@192.168.100.22:jinwenShi/phpTest.git
gitpush -u origin master
推送已存在的Git仓库
cdexisting_git_repo
gitremote add origin git@192.168.100.22:jinwenShi/phpTest.git
gitpush -u origin master
Ubuntu系统下Git的使用相关推荐
- Ubuntu系统下Git版本控制使用教程|1-6
文章目录 使用git对代码进行版本控制 git的三个工作区和工作流程 git的本地基本操作 如何安装git 如何配置git 使用git对本地代码进行版本控制 使用git同时管理本地和远程代码 git高 ...
- 解决Ubuntu系统下git clone下载速度较慢的问题(亲测有效)
常见问题使用Git clone下载网速通常有十几kb,下载较慢. 使用以下指令即可解决: //这是我们要clone的,通常是github.com需要替换掉,就是在github.com后面加上.cnpm ...
- ubuntu系统下git push时出现问题 git clone:Failed to connect to github.com port 443: Connection refused解决办法
在VMware虚拟机Ubuntu20.04上git push ORB_SLAM2 项目时出现了如下报错 解决方案: 如果没有开vpn 首先将 http://github.com/任意项目路径 切换为 ...
- 安卓9.0刷linux,Ubuntu系统下编译Android 9.0系统
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前言 在Ubuntu系统下编译Android系统.哎呀不知道是不是换了新电脑的缘故,这次编译居然从安装JDK和配置环境下 ...
- linux系统下qt中文输入法,Ubuntu系统下Qt使用中文输入法(示例代码)
近几个月一直在搞QML框架下的UI控件,没有更新博客.今天记录下Ubuntu系统下Qt开发工具使用中文输入法的流程. (题外话,Linux系统下的开发,离线是没法搞的(夸张手法),不联网简直就是事倍功 ...
- Ubuntu系统下使用ROS(moveit )连接ABB实体机器人(irb120)(1.控制仿真)
前言: 经过两天的踩坑,终于将ROS与ABB连接成功,可以通过rviz的gui界面拖动机械臂来控制实体ABB机械臂进行运动,因为网络上的教程(几位博主和ROS WIKI等)个别步骤的不完整,所以走了很 ...
- ④ESP8266 开发学习笔记_By_GYC 【Ubuntu系统下ESP8266 开发环境搭建】
目录 ④ESP8266 开发学习笔记_By_GYC [Ubuntu系统下ESP8266 开发环境搭建] 一.安装前准备 1.乐鑫官方的ESP-IDF 编程指南 2.ESP-IDF风格的ESP8266 ...
- usrp运行完整linux,Ubuntu系统下USRP硬件驱动(UHD)的编译与安装
在Ubuntu系统下USRP硬件驱动(UHD)安装最简单的方式就是直接从Ettus Research官方提供的PPA源安装,不过本文介绍的是如何从源代码进行编译与安装. 1.从PPA源安装只需要下面三 ...
- Ubuntu系统下安装微信
安装微信实现截图发送图片功能 1.打开终端输入命令,更新软件源 sudo apt-get update 2.输入以下命令(一定注意 -O- 中间是大写字母O,不是0也不是小写o!!!) wget ...
最新文章
- php json.parse,PHP JSON头导致JSON.parse出错(使用jQuery)
- 蓝桥杯 兰顿蚂蚁(模拟)
- 20秋PHP作业3,北语20秋《PHP》作业3【标准答案】
- python双引号报错_Python中select语句中的双引号”“怎么处理
- 【超经典】Java多态有什么好处?怎样用?
- 计算机控制论文,计算机控制系统论文.ppt
- H.264/AVC 标准中CAVLC 和CABAC 熵编码算法研究
- mysql 失效转移_MySQL基于MHA的FailOver过程
- 计算机图学测试题及答案,《计算机图形学》练习测试题及参考答案
- mongoDB 3.0 安全权限访问控制
- java iterator 源码_Java 集合系列(四)—— ListIterator 源码分析
- paip.函数式编程方法概述以及总结
- HDFS的命令行使用【常用 hdfs 命令】
- 百度前员工因内网发布“女优一览表”被辞退,自诉:想转鉴黄师
- 零基础学会数据分析计划
- 带左右箭头图片轮播的JS代码
- ArcGIS For Unity3D(一)—— 在Unity3D中开启ArcGIS
- 和尚挑水 java_用do...while语句编写程序t18_2.java
- Unity3dAndroid Studio实现开机自启App以及激活其他App
- 网易大神app ios和android,网易大神app是干嘛的?网易大神有什么用?