linux下git管理工具安装及使用(最下有方简单格式)

GIT简介

  1. 什么是GIT

git是一个开源的分布式版本控制系统,用于高效的管理各种大小项目和文件。

  1. 代码管理工具的用途
  • 防止代码丢失,做备份
  • 项目的版本管理和控制,可以通过设置节点进行跳转
  • 建立各自的开发环境分支,互不影响,方便合并
  • 在多终端开发时,方便代码的相互传输
  1. git的特点
  • git是开源的,多在*nix下使用,可以管理各种文件
  • git是分布式的项目管理工具(svn是集中式的)
  • git数据管理更多样化,分享速度快,数据安全
  • git 拥有更好的分支支持,方便多人协调
  1. git安装

sudo apt-get install git

GIT使用

git结构

基本概念

  • 工作区:项目所在操作目录,实际操作项目的区域
  • 暂存区: 用于记录工作区的工作(修改)内容
  • 仓库区: 用于备份工作区的内容
  • 远程仓库: 远程主机上的GIT仓库

注意: 在本地仓库中,git总是希望工作区的内容与仓库区保持一致,而且只有仓库区的内容才能和其他远程仓库交互。

初始配置

配置命令: git config

  • 配置所有用户: git config --system [选项]

配置文件位置: /etc/gitconfig

  • 配置当前用户: git config --global [选项]

配置文件位置: ~/.gitconfig

  • 配置当前项目: git config [选项]

配置文件位置: project/.git/config

  1. 配置用户名
e.g. 设置用户名
sudo git config --system user.name 用户名
  1. 配置用户邮箱
e.g. 邮箱设置
git config --global user.email 邮箱
  1. 配置编译器
e.g. 配置编译器为pycharm
git config core.editor pycharm

  1. 查看配置信息
git config --list

基本命令

  1. 初始化仓库

git init
意义:将某个项目目录变为git操作目录,生成git本地仓库。即该项目目录可以使用git管理

  1. 查看本地仓库状态

git status
说明: 初始化仓库后默认工作在master分支,当工作区与仓库区不一致时会有提示。

  1. 将工作内容记录到暂存区

git add [files..]

e.g. 将 a ,b 记录到暂存区
git add  a b

e.g. 将所有文件(不包含隐藏文件)记录到暂存区
git add  *

在Git项目中可以通过在项目的某个文件夹下定义.gitignore文件的方式,规定相应的忽略规则,用来管理当前文件夹下的文件的Git提交行为。.gitignore 文件是可以提交到公有仓库中,这就为该项目下的所有开发者都共享一套定义好的忽略规则。在.gitignore 文件中,遵循相应的语法,在每一行指定一个忽略规则。

.gitignore忽略规则简单说明

file            表示忽略file文件
*.a             表示忽略所有 .a 结尾的文件
!lib.a          表示但lib.a除外
build/          表示忽略 build/目录下的所有文件,过滤整个build文件夹;

4.取消文件暂存记录

git rm --cached [file]

  1. 将文件同步到本地仓库

git commit [file] -m [message]
说明: -m表示添加一些同步信息,表达同步内容

e.g.  将暂存区所有记录同步到仓库区
git commit  -m 'add files'
  1. 查看commit 日志记录

查看日志默认格式
git log
查看日志一行格式简化显示
git log --pretty=oneline

  1. 比较工作区文件和仓库文件差异

git diff [file]

  1. 将暂存区或者某个commit点文件恢复到工作区

git checkout [commit] -- [file]

  • --是为了防止误操作,checkout还有切换分支的作用
  1. 移动或者删除文件

git mv [file] [path]
git rm [files]
注意: 这两个操作会修改工作区内容,同时将操作记录提交到暂存区。


版本控制

  1. 退回到上一个commit节点

git reset --hard HEAD^
注意 : 一个^表示回退1个版本,依次类推。当版本回退之后工作区会自动和当前commit版本保持一致

  1. 退回到指定的commit_id节点

git reset --hard [commit_id]

  1. 查看所有操作记录

git reflog
注意:最上面的为最新记录,可以利用commit_id去往任何操作位置

  1. 创建标签

标签: 在项目的重要commit位置添加快照,保存当时的工作状态,一般用于版本的迭代。

git tag [tag_name] [commit_id] -m [message]
说明: commit_id可以不写则默认标签表示最新的commit_id位置,message也可以不写,但是最好添加。

e.g. 在最新的commit处添加标签v1.0
git tag v1.0 -m '版本1'
  1. 查看标签

git tag 查看标签列表
git show [tag_name] 查看标签详细信息

  1. 去往某个标签节点

git reset --hard [tag]

  1. 删除标签

git tag -d [tag]

保存工作区

  1. 保存工作区内容

git stash save [message]
说明: 将工作区未提交的修改封存,让工作区回到修改前的状态

  1. 查看工作区列表

git stash list
说明:最新保存的工作区在最上面

  1. 应用某个工作区

git stash apply [stash@{n}]

  1. 删除工作区

git stash drop [stash@{n}] 删除某一个工作区
git stash clear 删除所有保存的工作区

分支管理

定义: 分支即每个人在原有代码(分支)的基础上建立自己的工作环境,单独开发,互不干扰。完成开发工作后再进行分支统一合并。

  1. 查看分支情况

git branch
说明: 前面带 * 的分支表示当前工作分支

  1. 创建分支

git branch [branch_name]
说明: 基于a分支创建b分支,此时b分支会拥有a分支全部内容。在创建b分支时最好保持a分支"干净"状态。

  1. 切换工作分支

git checkout [branch]
说明: 2,3可以同时操作,即创建并切换分支

git checkout -b [branch_name]

  1. 合并分支

git merge [branch]

冲突问题是合并分支过程中最为棘手的问题

当分支合并时,原分支和以前发生了变化就会产生冲突
当合并分支时添加新的模块(文件),这种冲突可以自动解决,只需自己决定commit操作即可。
当合并分支时两个分支修改了同一个文件,则需要手动解决冲突。

  1. 删除分支

git branch -d [branch] 删除分支
git branch -D [branch] 删除没有被合并的分支

分支合并

远程仓库

远程主机上的git仓库。实际上git是分布式结构,每台主机的git仓库结构类似,只是把别人主机上的git仓库称为远程仓库。

GitHub介绍

github是一个开源的项目社区网站,拥有全球最多的开源项目。开发者可以注册网站在github建立自己的项目仓库。

网址: github.com

代码管理工具:git

获取项目

  • 在左上角搜索栏搜索想要的获取的项目
  • 选择项目后复制项目git地址
  • 在本地使用git clone方法即可获取
git clone https://github.com/xxxxxxxxx

注意: 获取到本地的项目会自动和github远程仓库建立连接。且获取的项目本身也是个git项目。

创建删除git仓库

  • 点击右上角加号下拉菜单,选择新的仓库
  • 填写相应的项目信息即可

  • github仓库相对本地主机就是一个远程仓库 通过remote连接,如果需要输入密码输入github密码即可。连接后即可使用远程仓库操作命令操作。readme文件会被自动作为项目介绍

  • 如果是在自己的仓库界面选择settings,在最后可以选择删除仓库。

远程仓库操作命令

所有操作在本地git仓库下进行

  1. 添加远程仓库
git remote  add origin https://github.com/xxxxxxxxx
  1. 查看连接的主机

git remote
注意: 一个git项目连接的远程主机名不会重复

  1. 删除远程主机

git remote rm [origin]

  1. 将本地分支推送给远程仓库

将master分支推送给origin主机远程仓库,第一次推送分支使用-u表示与远程对应分支建立自动关联

git push -u origin  master
  1. 推送代码到远程仓库
git push
  1. 推送标签

git push origin [tag] 推送本地标签到远程

git push origin --tags 推送本地所有标签到远程

  1. 推送旧的版本

git push --force origin 用于本地版本比远程版本旧时强行推送本地版本

  1. 删除远程分支和标签

git branch -a 查看所有分支
git push origin [:branch] 删除远程分支
git push origin --delete tag [tagname] 删除远程仓库标签

  1. 从远程获取代码

获取远程分支代码

git pull

将远程分支master拉取到本地,作为tmp分支

git fetch origin master:tmp

区别

pull将远程内容直接拉取到本地,并和对应分支内容进行合并
fetch将远程分支内容拉取到本地,但是不会和本地对应分支合并,可以自己判断后再使用merge合并。

命令简化整合

初始配置
安装git:sudo apt-get install git
配置用户名:sudo git config --system(所有用户) | --global(当前用户,不需要加sudo) user.name 用户名
配置用户邮箱:sudo git config --system(所有用户) | --global(当前用户,不需要加sudo) user.email 邮箱
查看配置信息:git config --list


基本命令
初始化仓库:git init
查看本地仓库状态:git status
将文件记录到暂存区:git add [files file1...]
取消文件暂存记录:git rm --cached [file]
同步文件到本地仓库:git commit [file] -m ["描述"]
查看日志(q退出):git log (--pretty=oneline以一行格式简化显示,可以不加)
对比工作区文件和仓库文件差异:git diff [file]
将暂存区文件恢复到工作区(工作区删除暂存区也可以恢复):git checkout [commit] -- [file]

删除文件:git rm [file] [路径]
移动(重命名)文件:git mv [files]
注意: 这两个操作会修改工作区内容,同时将操作记录提交到暂存区。

创建忽略检查文件(在此文件中内容可以忽略检查):touch .gieignore
创建项目介绍文件:touch README.md


版本控制(退回版本可以恢复git删除命令文件)
退回上一个commit节点(一个^退回一个版本,N个^退回N个版本):git reset --hard HEAD^
退回到指定commit节点:git reset --hard [commit_id]
查看所有操作记录:git reflog

标签: 在项目的重要commit位置添加快照,保存当时的工作状态,一般用于版本的迭代。
创建标签(标签名不能重复):git tag [版本名] [节点id] -m ["描述"]
查看标签:git show [版本名]
去往标签节点:git reset --hard [版本名]
删除标签:git tag -d [版本名]


工作区控制:将工作区未提交的修改封存,让工作区回到修改前的状态
保存工作区:git stash save ["描述"]
查看工作区:git stash list
应用工作区:git stash apply [stash@{n}]
删除某一个工作区:gitstash drop [stash@{n}]
删除所有工作区:git stash clear


分支管理:分支即每个人在原有代码(分支)的基础上建立自己的工作环境,单独开发,互不干扰。完成开发工作后再进行分支统一合并。
查看分支:git branch (-a查看所有分支,包括远程连接分支)
创建分支:git branch (-b创建并切换分支) [分支名称]
切换分支:git checkout [分支名称]

合并到当前分支:git merge [分支名称]
*用visual studio code查看更明确
冲突问题是合并分支过程中最为棘手的问题
当分支合并时,原分支和以前发生了变化就会产生冲突
当合并分支时添加新的模块(文件),这种冲突可以自动解决,只需自己决定commit操作即可。
当合并分支时两个分支修改了同一个文件,需要手动解决冲突(解决完成git add以及git commit即可)。

删除分支:git branch (-d删除合并分支) | (-D删除没有合并分支) [分支名称]


远程仓库:远程主机上的git仓库。实际上git是分布式结构,每台主机的git仓库结构类似,只是把别人主机上的git仓库称为远程仓库。
搭建远程仓库方法:
1,可以通过gitlib软件搭建远程仓库
2,gitlab/github公共类服务器


github获取项目:
1,搜索到想要获取的项目
2,选择项目后辅助项目git地址
3,使用git cloen url下载项目到本地(选择HTTPS获取url地址(非开源项目需要密码))
*注意: 获取到本地的项目会自动和github远程仓库建立连接。且获取的项目本身也是个git项目。
github创建仓库:
1,点击右上角加号下拉菜单,选择new repository
2,填写项目名称、项目描述(作为项目基本信息展示)、设置公开/私有、选择是否添加README、选择是否添加.gitignore、选择是否添加证书(遵循协议)
3,点击create repository创建
github删除仓库:
1,点击右上角头像下拉菜单,选择your repostiories
2,选择界面右上方settings
3,拖到网页最下方红色框位置
4,红色框最下方点击delete this repository
5,填写删除当前仓库路径/名称
6,点击删除

添加远程主机:git remote add [远程主机名(自行命名)] https地址
删除远程主机:git remote rm [远程主机名(自行命名)]
上传分支到远程仓库(需要输入用户名和密码):将master分支推送给origin主机远程仓库,第一次推送分支使用-u表示与远程对应分支建立自动关联
git push -u [远程主机名(自行命名)] [分支名称]
推送代码到远程仓库:git push
查看所有分支:git branch -a
删除远程分支:git push [远程主机名(自行命名)] [:分支名]
删除远程仓库标签:git push  [远程主机名(自行命名)] --delete tag  [标签名]
推送本地标签到远程:git push origin ([标签名] 单标签) | (--tags 所有标签)
强行推送旧版本:git push --force [远程主机名(自行命名)]
获取远程分支代码(内容合并):git pull
将远程分支拉去到本地(内容不会合并可以用merge根据情况进行合并):git fetch [远程主机名(自行命名)]  [远程分支名]:[本地分支名]

github添加SSH信任主机:
1,点击右上角头像下拉菜单settings
2,点击左侧SSH and GPGkeys
3,点击右上角new SSH key
4,信任公钥获取:
  1,生成密钥对:ssh-keygen
  2,进入主目录:cd
  3,进入ssh目录:cd .ssh
  4,打开id_rsa.pub:cat id_rsa.pub
  5,获取公钥
5,输入标题、添加信任主机公钥
信任后可用ssh地址添加远程主机:git remote add [远程主机名(自行命名)] ssh地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容