Git使用_agurt80004的博客-程序员秘密

技术标签: git  运维  开发工具  

一、Git是什么?

git是一个版本控制软件

张开的故事:

小张是一个很有野心的程序员,经过万般努力终于开发出了1个视频网站,并上线;

 

由于网站很火,又要开发新的功能,在开发功能的时候可能会出,就需要把目前的网站代码保留下来留条退路。

如何保存呢?打包压缩?

 

缺点:数据量越积压越多

 

于是小张选择了Git做版本控制

 1、进入程序目录下

2、右击Git Bash Here,进入git终端(Linux中的命令都支持)

 

二、git基本使用

1、git init 命令 创建一个.git的隐藏文件夹(存储git发布的版本)

2、$ git status   查看当前文件的状态(红色 初始状态)

 

2、git add .  把当前目录中所有文件从工作区添加的暂存区  ; 状态改变变成绿色

 

3、git commit -m '第一次上线'   从暂存区添加到分支生产一个版本;保存在.get目录中;

 

若第一次使用Git会出现以上报错,请在全局声明邮箱和用户

 

4、Git把管理的文件分为了2个区(工作区、版本库)4种状态(原内容、修改过的内容、暂存、分支)。

4.1、其中原内容---------》修改过会被自动检测到,把修改过的内容--------》提交到暂存状态使用git add .-------》提交到分支使用git commit -m '版本描述信息' (生成1个版本)

4.2、使用 git status 查看当前文件的状态 如果原文件已经修改 状态为红色,暂存状态为绿色。

4.3、git log 查看当前版本之前的版本 、git reflog 查看所有版本

 

5、git add *  把所有工作区中修改过的内容 提交到暂存区,注意但不生成版本!

 

 

6、git log 查看版本信息

 

7、git reset --hard 14555da1d4d31af4875d210c5605bcd729726eaa(版本唯一标识) 回滚到原版本

 

版本回滚

 

 

 上回说的小张要开发新的功能 非洲专区,假设此时原来程序出BUG了

 

所以需要把新功能非洲专区暂存到一个位置, 然后再去修改日韩专区、欧美专区的BUG

 

8、git stash 把新增的内容保存到一个位置,自动迁移了非洲专区

 

 小张修改了第一次上线版本的BUG, 该日韩专区为中日韩专区

 

 

 第1版本修改完BUG,提交无BUG版本

$ git add .
[email protected]-20170811HMNW MINGW64 /d/test09 (master)


$ git commit -m '第1版本BUG修复完毕'

[master cdcb19d] 第1版本BUG修复完毕 3 files changed, 85 insertions(+), 10 deletions(-) create mode 100644 .idea/vcs.xml

 

 这时怎么把非洲专区拿回来呢?

 9、git stash pop

 把新版本和 拿去的功能(非洲专区)进行完美合并  这就是Git厉害之处

 

 

 

10、如果在git stash 期间, 多次修该一处代码并提交了版本,git stash pop就会出现冲突()

因为git stash pop不知道和哪个版本进行合并

 

补充:

git stash             将当前工作区所有修改过的内容存储到“某个地方”,将工作
                          区还原到当前版本未修改过的状态
git stash list        查看“某个地方”存储的所有记录
git stash clear     清空“某个地方”
git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
git stash drop      编号,删除指定编号的记录

 

 

 

 

三、分支

Git默认分支为master,也可以设置多个分支,开发工作中为了避免线上代码受到影响、也能保证版本功能升级一般 设置会2条分支

master分支:放线上版本代码;

dev分支:复制一份线上代码 ,放在dev分支以便开发出带有新功能的版本 ;开发完成后合并为稳定版本2;

 

 

 

1、创建分支 git branch  分支名称 ; git branch 查看已有分支

[email protected] MINGW64 /d/Git_test (master)
$ git add .

[email protected]-20170811HMNW MINGW64 /d/Git_test (master)
$ git commit -m '开始分支学习'
[master 1ad25a2] 开始分支学习
 3 files changed, 61 insertions(+), 2 deletions(-)
 create mode 100644 readme.txt

[email protected]-20170811HMNW MINGW64 /d/Git_test (master)
$ git status
On branch master
nothing to commit, working tree clean

[email protected]-20170811HMNW MINGW64 /d/Git_test (master)
$ git branch dev

[email protected]-20170811HMNW MINGW64 /d/Git_test (master)
$ git branch
  dev
* master

[email protected]-20170811HMNW MINGW64 /d/Git_test (master)
$

 

2、分支切换  git checkout 分支名称  (注意由于 dev 分支是由master分支创建的,所以dev分支代码和master是一致的)

$ git checkout dev
Switched to branch 'dev'

 补充:

切换分之前一定要确保 工作区域是没有被修改过的内容。否则会报错,解决:git stash   git stash clear

$ git checkout master

error: Your local changes to the following files would be overwritten by checkout:
        .idea/workspace.xml
Please commit your changes or stash them before you switch branches.
Aborting

 

3、分支合并  git merge dev 分支名称

在dev分支开发完毕,测试通过之后,进入master分区,进行分区合并

 div分支的版本也已经合并到master分支

 

 

 

四、GitHub

我们在公司做完开发,如果在家或者出差也要继续工作怎么办?可以结合GitHub,GitHub类似一个网盘,帮我们托管维护代码;

 

1、创建一个仓库

 

 

 

 2、在本地创建项目

[email protected] MINGW64 /d/s5day83 (master)
$ git add .

[email protected]-20170811HMNW MINGW64 /d/s5day83 (master)
$ git commit -m '初次提交'
[master (root-commit) d650438] 初次提交
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

[email protected]-20170811HMNW MINGW64 /d/s5day83 (master)

$ git remote add origin https:
//github.com/zhanggen3714/s5day83.git [email protected]-20170811HMNW MINGW64 /d/s5day83 (master) $ git push -u origin master Username for 'https://github.com': zhanggen3714 Counting objects: 3, done. Writing objects: 100% (3/3), 243 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/zhanggen3714/s5day83.git * [new branch] master -> master Branch master set up to track remote branch master from origin. [email protected]-20170811HMNW MINGW64 /d/s5day83 (master) $

 

3、拉GitHub中的项目  git clone https://github.com/zhanggen3714/s5day83

 

 

 

 4、在GitHub上把项目克隆到本地之后,修改完毕怎么再次提交到GitHub呢?

 查看别名: vim .git/config

git push origin master    提交本地版本到GitHub

5、git pull origin master   从GitHub拉取代码到工作区(和克隆区别,拉更改部分)

 

 

总结:

公司:

  1、创建远程仓库

  2、写readme

       3、git add .

  4、git commit -m ' 在公司写得代码'

  5、git push origin mastet(提交代码到GitHub)

 

回家:

回家之后假设没有带电脑回家

  1、git clone https://github.com/zhanggen3714/s5day83(把在公司开发的代码克隆到家里这电脑上)

  2、git add .

  3、git commit  '在家开发的代码'

  4、git push origin mastet(把在家写得的代码提交到GitHub)

 

第二天回到公司:

  1、git pull  origin  master  (把在家写得,拉下来)

 

状况1:如果到公司没有先 pull 在家写得代码,而是修改了一番,在pull就会出现冲突;

解决:解决冲突,再次提交新版本到GitHub;

 

补充:

git pull 是一步从远程拉代码到工作区

也可以通过一下2个步骤

git fetch  origin 分支  从远程拉到分支

git merge origin master (合并分支到master)  =  git rebase origin/master 

 

 

四、协同开发

1、合作者模式: 将用户添加到仓库合作者之后,该用户就可以向 test 仓库里面上传自己的代码了。

 

 2、组织:创建一个组织,把添加用户,一起做项目。

2.1 创建组织

 

2.2 邀请其它用户加入

 

 

 

 

 

 3、如果你在GitHub上看到一个很牛逼代码有BUG,怎么给别人修正呢?大喊一声 fork,不是fuck。

 

3.1、搜素到该项目

3.2 fuck一下它

 

 3.3 提交你的 修复方案

 

 

 

BUG修复说明

 提交

 

 

 

 

 

 

 

 以上操作 之后 该用户就会接收到你的 pull request;

 

 

五、git的配置

1. 配置文件

Git的配置文件有三个:

  • 系统配置: /private/etc/gitconfig
  • 用户配置: ~/.gitconfig
  • 项目配置:.git/config

 

2. ssh 无密码连接远程仓库

 1、生成一对秘钥

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator.PC-20170811HMNW/.ssh/id_rsa):
/c/Users/Administrator.PC-20170811HMNW/.ssh/id_rsa already exists.
Overwrite (y/n)?

[email protected]-20170811HMNW MINGW64 /d/在公司 (master)
$ cd ~/.ssh/

[email protected]-20170811HMNW MINGW64 ~/.ssh
$ ls
id_rsa  id_rsa.pub

[email protected]-20170811HMNW MINGW64 ~/.ssh
$ cp id_rsa.pub /d/在公司

[email protected]-20170811HMNW MINGW64 ~/.ssh
$ cd /d/在公司
View Code

2、把公钥copy到GitHub

 

 

 

 

 

3、配置忽略的文件

 $ vim .gitignore

 添加要忽略的文件

 

 

 

 

参考链接:银角大王 http://www.cnblogs.com/wupeiqi/p/7295372.html

转载于:https://www.cnblogs.com/sss4/p/7543904.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/agurt80004/article/details/101136762

智能推荐

IDEA 自动生成Mapper_idea生成mapper_很倔也很天真的博客-程序员秘密

还在为数据表太多而烦恼吗?No, 我要偷懒, 让其自动创建。了解到 maven 有插件可以生成mapper, 但那不是我想要的,我想要的是 @注解方式通过数据表实体自动创建 我从中得到了启发,那就是 拼接字符串并生成文件,正好可以获取数据表与字段信息自动生成流程菜单首先选择要添加的表,一个或多个, 右键-Scripted Extensions 就有一个脚本选择菜单从中选择 Gener...

hive动态分区和静态分区的区别 分区报错_天天同学Aa的博客-程序员秘密

静态分区SP(static partition) 动态分区DP(dynamic partition) 静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列是在编译时期,通过用户传递来决定的;动态分区只有在SQL执行简单理解就是静态分区是只给给的死值,就比如gn=‘dnf’, 只有在是游戏名字是dnf的时候,数据才会进入这个分区 动态是...

基于Java的C/S程序(服务器和客户端)图书管理系统_钱多多666的博客-程序员秘密

C/S程序概述TCP协议的C/S程序使用ServerSocket搭建服务器,Socket搭建客户端来连接服务器,连接之后,服务器会返回一个Socket对象。相关知识点1、IP地址是计算机在互联网中的唯一标识。2、端口号的范围 0-65535 之间,端口号在使用时,应尽量避免0-1024之间的端口号,因为已经被一些知名的软件和windows操作系统所占用了。ServerSocket类和Socket类ServerSocket(int port) //(构造方法)传入一个端口

QT5.142连接mysql数据库_流下没有技术的眼泪。的博客-程序员秘密

QT5.14.2连接mysql 8.0数据库Qt连接数据库时出现QSqlDatabase: QMYSQL driver not loadedQSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7是因为Qt有些版本没有自带qsqlmysql.dll和qsqlmysqld.dll,这时候就需要自己手动编译一下源码,生产这个2个dll。第一步、在官网下载好源码。第二步、 在源码文件**…\qtbase\src\plugin

为什么别的职业都是越老越值钱,唯独程序员越老越容易失业?_普通网友的博客-程序员秘密

前言程序员的队伍,Python之父1956年生人,60多岁了,Java之父1955年生人,也60多了。近一点,阿里的多隆1976年出生,现在也有四张多了。这样的例子还有很多。这些都是实证,说明程序员越老越值钱。但但但但但但是,以上内容都是在扯淡,为什么?因为其中存在很大的幸存者偏差。看到某一个职业,取得一定成就的,都是比较年长的,就认为这个职业越老越值钱,看到程序员年龄大的很少,就认为程序员越老越...

300字后端java自我介绍_草履虫稽亚娜的博客-程序员秘密

我叫ChatGPT,是一个由OpenAI训练的大型语言模型。我拥有超过300字的后端Java经验,我熟悉各种Java技术,比如Spring、Hibernate以及其他流行的Java框架。我也熟悉数据库技术,比如MySQL、Oracle和PostgreSQL,可以进行查询优化以及数据库设计。此外,我还擅长使用JavaScript、HTML和CSS进行Web开发,并且对RESTful API有深入的了...

随便推点

pytorch tensor division/除法_pytorch除法_冬日and暖阳的博客-程序员秘密

除法的时候要注意数据类型的问题a = torch.div(torch.tensor([160, 110]), 0.137)jupyter notebook就会奔溃, 因为torch.tensor([160, 110])是torch.int64数据类型, 而0.137(或者说torch.tensor(0.137))是torch.float32类型.如果改成下面这样, 就会顺利运行a = t...

手敲Mybatis(四)-数据源池化处理实现_渣渣洒泪成长记的博客-程序员秘密

本章节主要实现Mybatis数据源池化处理实现的细节,看我们如果通过事务工厂获取无池化事务以及有池化事务,再以xml配置事务类型,根据类型解析映射不同的事务工厂进行有池化/无池化的处理,每进行查询语句的方法的调用则获取次连接,有池化满足条件则从池子中取出,这里的设计有很多巧妙之处,可以去细细品,供自己日后设计之路。

SpringBoot导入和导出Csv文件(二十八)_springboot写csv文件_两个蝴蝶飞的博客-程序员秘密

主要内容:1. csv文件2. hutool处理csv文件的几个类3. hutool处理csv的写入和读取4. SpringBoot 导入和导出 csv文件实例

printPicnic.py_Yuanwai1995的博客-程序员秘密

# -*- coding: utf-8 -*-"""Created on Mon Feb  5 09:41:53 [email protected]: He Yuanwei"""picnicItems = {'sandwiches': 4, 'apples': 12, 'cups': 4, 'cookies': 8000}def printPicnic(item

CTF之做题总结(七)_sosoxy的博客-程序员秘密

#!/usr/bin/python# -- coding: UTF-8 --print(“凯撒密码解密”)#密文str = ‘ggqht{ggQht_gsQ10jsf#@fopwh}’#密钥(平移位数)my = 12print(str,“密钥”,my)print(“密文:”, end=’’)for i in str: mw = ord(i) if (64 < mw < 91):#大写字母 jm = mw + my if jm > 90: jm = (mw - 26

USB Host的上拉下拉电阻_usb d+拉低 usb还有电吗_zzsfqiuyigui的博客-程序员秘密

关于USB的上下拉电阻,不是随便接个任意阻值的电阻就ok了。当你的USB为主设备的时候,D+、D-上分别接一个15K的下拉电阻,这样可以使得在没有设备插入的时候,D+、D-上始终保持低电平;当为从设备接口时,可以通过在上拉电阻来设置不同的传输速率,当D+接一个1.5K上拉电阻,可以工作在高速率模式如12MBPs,当D-接1.5K上拉电阻,工作在低速率模式,如1.5MPBs。主USB