git

什么是git

开源的分布式版本控制系统, 用于高效的管理大小项目和文件

代码管理工具

  • 防止代码丢失, 做备份
  • 代码版本管控, 设置节点, 多版本切换
  • 建立分支各自开发, 互不影响, 方便合并
  • 多人协调, 方便代码共享传输

git 特点

开源, 多在 *nix 下使用

分布式管理工具 (svn 集中式)

每台主机都有完整代码, 代码的交互是增量更新

拥有更好的分支支持, 方便多人协调工作

分布式

  • 由中间服务器来集中管理
  • 权限也由中央控制
  • 数据保密性更好, 因为只通过中央处理
  • 但是中央服务器如果炸了就gg
  • 而且全部依靠中央, 对网络之类的环境要求较高

集中式

  • 无中央服务器, 每个主机都是均等的
  • 每个主机都可以保存代码以及推送给其他主机
  • 不论只要不是所有主机都炸了, 都可以从其他的主机获取到
  • 以及主机拉取的时候不依赖 中央服务器的环境, 更加安全快速

git 实际工作模式

虽然 分布式的git 不需要依靠中央节点

但是 实际工作还是会定义中央主机, 工作模式模拟的是 集中式管理

git 安装

sudo  apt-get install git

git 空间

工作区  项目所在操作目录, 项目操作区域

暂存区  用于记录工作区的工作(修改)内容

仓库     将记录内容备份

远程仓库  远程主机上的 git 仓库

git 初始化配置

git config

配置系统所有用户

git config --system [选项]
配置文件位置: /etc/gitconfig

配置当前用户

git config --global [选项]
配置文件: ~/.gitconfig

配置当前项目

git config [选项]
配置文件: 项目目录/.git/config
* 要求必须在项目下执行
* 顺序 项目>当前用户>所有用户

配置用户名(必须要配置)

sudo git config --system user.name yangtuo

执行位置  任何位置

实例

tarena@tedu:~$ sudo git config --system user.name yangtuo
[sudo] tarena 的密码:
tarena@tedu:~$
tarena@tedu:~$ cat /etc/gitconfig
[user]
name = yangtuo
tarena@tedu:~$

配置用户邮箱(必须要配置)

sudo git config --global user.email 745206110@qq.com
实例
tarena@tedu:~$ sudo git config --global user.email 745206110@qq.com
tarena@tedu:~$ cat ~/.gitconfig
[user]
email = 745206110@qq.com
tarena@tedu:~$

查看当前项目 配置信息

git config --list
实例
tarena@tedu:~/git$ git config --list
user.name=yangtuo
user.email=745206110@qq.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.editor=vscode
tarena@tedu:~/git$

git  基本操作

初始化仓库

将某个项目目录, 变为 git 操作目录, 生成 git 本地仓库
该目录即可使用 git 进行管理

git init

 实例

tarena@tedu:~/git$ git init
初始化空的 Git 仓库于 /home/tarena/git/.git/
tarena@tedu:~/git$

基本的空间操作示例图

查看分支状态

git status

初始默认分支为 master

当工作区和仓库 不一致的时候, 会有所提示

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

git add files
git add file1, file2
git add .

 ps 

  git add . 2.0 版本之后就可以支持所有的操作, 当然也包括删除文件也可以提交

  之前 1.0 版本 . 的操作是无法提交删除文件操作的

取消文件暂存记录

git commit -m 'add some files'

将暂存区内容同步到仓库

每次同步都需要添加 [msg] 同步信息 格式为字符串

commit 操作只能同步暂存区已经记录的内容

git commit -m [msg]

查看 commit 日志

一个是详细查看, 一个是简单查看

git log
git log --pretty=oneline

实例

tarena@tedu:~/git$ git log
commit 3f8c95ebeb0998f9f4de793ceb856827a5da27fc
Author: yangtuo <745206110@qq.com>
Date: Thu Mar 7 16:17:36 2019 +0800
新添加了一个电子词典项目

实例

tarena@tedu:~/git$ git log --pretty=oneline
3f8c95ebeb0998f9f4de793ceb856827a5da27fc 新添加了一个电子词典项目
5f8a36d92345fc685381418125a69e63d9163df3 全部删掉
9bcdb97cae7082b59b532c817b1e08e8cde3ec9a add some files
tarena@tedu:~/git$

文件比较

用于比较工作区文件和仓库文件差异
git diff [file]

丢弃工作区的修改

git checkout -- file

从仓库恢复文件

git checkout file

移动 / 删除 文件并提交缓存

git mv [file] [path]
git rm [file]

版本控制

退回到上一个的 commit 节点

git reset --hard HEAD^

HEAD 是 commit 指针

一个 ^ 代表后退一个

通常不会写太多, 最多两个三个而已

去往指定的 commit 操作节点

git reset --hard [commit_id]

commit_id 不需要全写, 前7位就够了

去往指定的节点后, 在此节点后的所有版本会无法查看

可以通过 git reflog 来全部查看

查看所有的历史

git reflog

利用该操作,可以去往任意的历史位置

标签操作

标签创建

git tag[名称] -m [message]

标签  在工作的重要位置添加的快照, 保存当时的工作状态

一般用于版本迭代等

注意  message 可以不写, 但是最好添加

查看所有标签

git tag

将标签 给指定的 commit_id 添加

git tag [tag_name] [commit_id] -m [message]

查看标签详细信息

git show [tag]

删除标签

 git tag -d [tag_name]

去往某个标签节点

git reset --hard[tag]

临时工作区

创建临时保存工作区

让工作区回到修改前状态

并且修改保存在一个临时工作区

git stash

查看临时工作区列表

最新的工作区记录为 stash{0} 依次排列

git stash list

将临时应用到工作区

git stash apply stash@{2}

将临时工作区删除

git stash drop [stash]  删除一个
git stash clear 删除所有

分支管理

分支即每个人在原有代码基础上建立自己的工作环境, 独立开发, 不回干扰其他分支操作 完成后合并到主线

多人开发建立分支优点: 安全, 不影响其他分支, 独立控制进度

查看分支情况

前面 * 的表示当前工作分支

git branch

创建新的分支

git branch [branch]

切换分支

git checkout [branch]

合并分支

表示将某个基于当前分支建立的分支,合并过来

合并分支过程中可能产生冲突,需要手动解决

在分支操作中尽量添加新的模块,不要修改原有代码内容

git merge [branch]

删除分支

未合并的分支是无法用 -d 删除的( 防手滑,防恶意手滑 )

必须使用 -D 才可以删除未合并的分支

 git branch -d [branch]

远程仓库管理

远程仓库

远程主机上的 git 仓库

git 作为分布式结构 每台主机的 git 仓库结构相似 只是把其他主机上的 git 仓库作为远程仓库

共享仓库

git 分布式结构衍生了很多工作模式 共享仓库是常用的模式之一\

普通隐藏的 .git 仓库不能被其他主机获取代码 共享仓库即可以将 git 项目共享的仓库

创建自己的远程仓库

选择共享库目录,设置目录属主

mkdir yangtuo_git
chown tarena:tarena yangtuo_git

初始化该目录为 git 仓库, 设置 bare 属性

yangtuo 项目名称

.git 习惯后缀

cd gitrepo/
git init --bare yangtuo.git

将配置 git 目录设置为 和共享仓库目录相同的属主

chown -R tarena:tarena yangtuo.git

添加项目到共享仓库

添加项目到共享仓库

该操作要在本地的一个 git 项目中执行

与远程连接默认使用 SSH 方法

origin 是给远程主机起的名字

git remote add origin tarena@127.0.0.1:/home/tarena/yangtuo_git/yangtuo.git

删除远程主机

连接多个远程主机的时候 远程名字不能重复

 git remote rm [origin]

将本地分支推送到远程共享仓库

-u 表示建立对应分支自动关联 一般首次向远程推送某个分支时使用

git branch -a 查看链接的远程分支 git branch -r 只查看远程分支

 git push -u [origin] [branch]

-f 本地强制上传到远程,把远程的覆盖

git push -f origin master

获取远程仓库项目

 git clone tarena@172.40.91.185:/home/tarena/gitrepe/tedu.git

从远程获取最新代码

clone 已经自动建立了关联, pull 可以直接拉取代码到对应分支

git pull

--rebase 拉取远程的文件把本地的覆盖

git pull --rebase origin master

从远程获取最新内容到本地

制霸远程分支拿来 并不在合并

若想合并 则在需要 git merge [branch]

git fetch

可以改拉取过来之后的分支名字

git fetch origin master:tmp

推送标签

git push [origin] [tag]

推送落后版本

当当前版本落后于远程版本 无法更新时使用

git push --force origin

git 操作命令详解的更多相关文章

  1. Git命令详解

    一个中文git手册:http://progit.org/book/zh/ 原文:http://blog.csdn.net/sunboy_2050/article/details/7529841 前面两 ...

  2. git命令详解( 七 )

    此为git命令详解的第七篇 这章我们可以来逐渐揭开 git push.fetch 和 pull 的神秘面纱了.我们会逐个介绍这几个命令,它们在理念上是非常相似的.   git push的参数 git ...

  3. Git应用详解第五讲:远程仓库Github与Git图形化界面

    前言 前情提要:Git应用详解第四讲:版本回退的三种方式与stash 这一节将会介绍本地仓库与远程仓库的一些简单互动以及几款常用的Git图形化界面,让你更加方便地使用git. 一.Git裸库 简单来说 ...

  4. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  5. iOS开发——开发实战篇&版本控制SVN和Git使用详解

     版本控制SVN和Git使用详解     公司的实际开发中,在天朝使用较多的还是SVN,因为SVN是集中式的,在天朝上班你们都懂的!     -----------------svn--------- ...

  6. 在telnet下操作memcache详解(操作命令详解)

    这篇文章主要介绍了在telnet下操作memcache详解,telnet下的memcache操作命令详解,需要的朋友可以参考下 在定位问题.测试等时候经常需要对memcache的数据进行一些操作,但是 ...

  7. 【转】adb操作命令详解及大全

    adb是什么?:adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.a ...

  8. git命令详解( 四 )

    此篇为git命令详解的第四篇,话不多说,我们直接上知识点好吧 git Push 偏离的工作 gitPush: 此命令负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录.一旦 git ...

  9. 【Git使用详解】Egit的常用操作详解

    常用操作 操作 说明 Fetch 从远程获取最新版本到本地,不会自动merge Merge 可以把一个分支标签或某个commit的修改合并现在的分支上 Pull 从远程获取最新版本并merge到本地相 ...

随机推荐

  1. 仿9GAG制作过程(一)

    有话要说: 准备开始学习Android应用程序的一个完整的设计过程.准备做一个仿9GAG的APP,前端界面设计+后台数据爬虫+后台接口设计,整个流程体验一遍.今天准备先把前端界面的框架给完成了. 成果 ...

  2. 小程序实践(十一):showModal的使用

    显示模态对话框,确定和取消两个选择+标题+内容的对话框 . // 编辑用户性别 tapSex:function(res){ var that = this wx.showModal({ title: ...

  3. ASP.NET C# 连接 Oracle数据库增删改查,事务

    一.知识介绍 ①ASP.NET 使用的是MVC模式,开发工具Visual studio ,语言C# ②Oracle是比较重型的数据库,这里主要介绍连接数据库,对数据进行具体的使用 ③Visual St ...

  4. 基础环境系列:MySQL8.0.12

    机型与版本:windows10(64-bits) Mysql环境配置:mysql8.0.12 一.MySQL安装 Mysql的安装有两种方法,一种是通过.msi一种是通过压缩包.穷呢,大家就老实下社区 ...

  5. linux快捷进入长目录的方法

    快捷命令   :alias chaoyang ='cd /usr/lib/uu/hh/lib' 1.将上述设置写到家目录的.bashrc文件中(~/.bashrc) 2.然后source ./bash ...

  6. awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一

    awk.grep.sed是linux操作文本的三大利器,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文 ...

  7. TableML-GUI篇(C# 编译/解析 Excel/CSV工具)

    项目情况 本文接上篇TableML Excel编译/解析工具,本文主要介绍GUI工具的使用,及配置项,如果你想了解此工具更加详细的说明,请阅读上篇文章. 项目地址:https://github.com ...

  8. Idea+Maven创建scala项目

    1.选择Create New Project 2.如下图选择,然后下一步 3.一直Next,填写groupID,artifactid,projectName之后等待IDEA初始化. 4.IDEA完成初 ...

  9. MySQL之记录相关操作

    一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...

  10. R语言学习——因子

    变量可分为名义型变量.有序型变量或者连续型变量.名义型变量是没有顺序之分的类别变量,如糖尿病类型Diabetes(Type1.Type2),即使在数据中Type1编码为1而Type2编码为2,这也并不 ...