git操作

linux基本命令

$ df -h 查看磁盘分区
$ pwd 返回当前位置所在的绝对路径
$ ~ 退回到家目录
$ ll .git/  在当前文件夹查看下一层文件夹.git(隐藏文件夹)下的文件信息
$ ll 查看文件夹目录
$ ll |less  查看文件夹目录
$ ls -lA 查看隐藏文件
$ ls -lA|less  查看隐藏文件
$ cat .gitconfig 查看全局的隐藏文件
$ vim good.txt 创建一个文件,并可在该文件内编辑内容  i 进入编辑模式(可在文件内写内容)
esc 退出进入命令模式 :wq保存斌退出vim   :set nu 给文件内容设置行号   :set nonu取消行号
$ touch 文件名  创建文件,同vim
$ cat good.txt  查看文件内容

Git的文件管理机制

'''
Git把数据看作是小型文件系统的一组快照,每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只保留一个连接指向之前存储的文件,所以Git的工作方式可以称之为快照流;
'''

版本控制器

"""
完成 协同开发 项目,帮助程序员整合代码

软件:SVN 、 GIT

git:集群化、多分支
"""

git

简介

"""
什么是git:版本控制器 - 控制的对象是开发的项目代码
代码开发时间轴:需求1 > 版本库1 > 需求2 > 版本库2 > 版本库1 > 版本库2 
"""

git与svn比较

git的工作流程

git分支管理

git使用

安装

# 1.下载对应版本:https://git-scm.com/download
# 2.安装git:在选取安装路径的下一步选取 Use a TrueType font in all console windows 选项

基础命令

将已有的文件夹 - 初始化为git仓库
"""
>: cd 目标文件夹内部
>: git init
"""
在指定目录下 - 初始化git仓库
"""
>: cd 目标目录
>: git init 仓库名
"""
在仓库目录终端下 - 设置全局用户

>: git config --global user.name '用户名'
>: git config --global user.email '用户邮箱'

注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用

查看全局用户签名:
cd ~  # 退到根目录
ls -lA|less 查看.gitconfig隐藏的文件
cat .gitconfig # 查看.gitconfig中的内容
在仓库目录终端下 - 设置局部用户

>: git config user.name '用户名'
	-- 用户名
>: git config user.email '用户邮箱'
	-- 用户邮箱
	
注:在当前仓库下的config新建用户信息,只能在当前仓库下使用
注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户

查看用户名、邮箱保存位置,先进入仓库(文件夹):
$ cat .git/config

查看仓库状态

# 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
>: git status  
	-- 查看仓库状态
>: git status -s  
	-- 查看仓库状态的简约显示

工作区操作
# 通过任何方式完成的文件删与改
# 空文件夹不会被git记录
撤销工作区操作:改、删
"""
>: git checkout .
	-- 撤销所有暂存区的提交
>: git checkout 文件名
	-- 撤销某一文件的暂存区提交
"""
工作区内容提交到暂存区
"""
>: git add .  
	-- 添加项目中所有文件
>: git add 文件名  
	-- 添加指定文件
"""
撤销暂存区提交:add的逆运算
"""
方式1:
$ git rm --cached good.txt

方式2:
>: git reset HEAD .
	-- 撤销所有暂存区的提交
>: git reset 文件名
	-- 撤销某一文件的暂存区提交
"""
提交暂存区内容到版本库
# git commit -m "版本描述信息" 文件名
eg:$ git commit -m 'my second commit -modify good.txt' good.txt

撤销版本库提交:commit的逆运算
"""
回滚暂存区已经提交到版本库的操作:
    查看历史版本:
        >: git log
        >: git reflog  指针HEAD@{移动到当前版本的步数}
        >:$ git log --pretty=oneline  将历史版本信息单行显示(简洁版),显示所有版本信息
        >:$ git log --oneline  单行显示比当前版本更低的版本,commit对应的hash值只部分显示

    查看时间点之前|之后的日志:
        >: git log --after 2018-6-1
        >: git log --before 2018-6-1
        >: git reflog --after 2018-6-1
        >: git reflog --before 2018-6-1
        
    查看指定开发者日志
        >: git log --author author_name
        >: git reflog --author author_name
        
    回滚到指定版本:
        回滚到上一个版本:
            >: git reset --hard HEAD^
            >: git reset --hard HEAD~
            
        回滚到上三个版本:(只能后退,不能前进)
            >: git reset --hard HEAD^^^  ^一个上尖号表示后退一步
            >: git reset --hard HEAD~3(后退步数)
            
       回滚到指定版本号的版本:(可以前进,亦可以后退,更实用)
            >: git reset --hard 版本号
            >: eg: git reset --hard 35cb292

            # 强行将线上版本回滚到本地指定的版本  
            # 1.查看版本号:
            >:eg: git reflog
            # 2.本地仓库先回滚到指定版本
            >:eg:git reset --hard da5d
            # 3.线下版本同步到远程(线上)版本
            >:eg: git push origin dev -force

        恢复到指针当前指向的版本位置:
        	>:$ git reset --hard HEAD    # 执行$ rm apple.txt 操作,文件此时在暂存区,执行前面的操作可以恢复当前文件

"""

log日志信息过多,需要多屏展示,展示方式如下:
​	空格向下翻页
​    b向上翻页
​    q退出

reset命令的三个参数对比:
--soft 参数
	仅仅在本地库移动HEAD指针
    eg:$ git reset --soft ec666cc  查看版本库状态为绿色
	原因:会把暂存区凸显出来
--mixed参数
	在本地库移动HEAD指针
    重置暂存区
    $ git reset --mixed  7c8d13a  查看版本库状态为红色
	原因:本地库跟暂存区改变了位置,所以工作区被凸显,工作区还在原地,文件在工作区的状态还是红色,
--hard参数
	在本地库移动HEAD指针
    重置暂存区
    重置工作区

比较文件差异

git diff[文件名]
	将工作区中的文件和暂存区进行比较
    eg:$ git diff apple.txt  会显示出两者内容的差异(git默认是以行内容区分两者差异的)
        
#=================================   
提交到缓存区之后,再次比较就没差异了
$ git add apple.txt
$ git diff apple.txt
# ===============================
git diff [本地库中的历史版本] [文件名]
eg:$ git diff HEAD apple.txt  # 也会显示差异
    将工作区中的文件和本地库历史记录比较
不带文件名比较多个文件
eg:$ git diff HEAD

过滤文件

如何生成一个以.gitignore结尾的过滤文件呢?

1.在Git仓库的根目录下面创建一个任意名称的.txt文件

2.启动cmd窗口 cd到仓库的根目录 执行ren 原.txt文件名 .gitignore

注意:其实还有一种简单的创建方式,如下:

在创建以‘.’开头的隐藏文件时,需要在文件名末尾再加上一个‘.’就能创建成功。
# .gitignore 文件
# 1)在仓库根目录下创建该文件
# 2)文件与文件夹均可以被过滤
# 3)文件过滤语法

""" 过滤文件内容
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤

eg:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交  空包下有__init__.py文件,是导包的初始化文件
"""
注意:前台和后台的根目录下都会有一个.gitigenore过滤文件,把一些不需要上传到版本库中的文件及包过滤掉,过滤条件一定要在第一次提交版本库之前完成。后台要手动创建:
# .gitignore文件内应该过滤的文件,比如以下:
# 过滤条件一定要在第一次提交版本库之前完成
# 各类编辑器产生的配置文件
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

# 日志文件
.log
*.logger

# 本地测试文件
scripts

# 导包缓存文件
*.pyc
__pycache__

后台项目提交到版本库

后台项目提交到版本库两种方式:

1.直接在Git Bash Here 进入到后台项目文件夹
$ cd G:/Python代码日常/day1/day1_proj
2.在改文件夹下初始化仓库
$ git init  # 初始化完毕之后pycharm里所有的后台文件都变成红色了,因为此时所有文件都在工作区
3.$ git add . 将所有文件提交到暂存区  # 此时pycharm所有文件变成绿色

4.1(使用git命令行提交):
git commit -m 
4.2(直接在pycharm中提交):
此时pycharm已经有了git环境,在项目的根目录文件夹右键,选择“git”-->“Commit Directory-->添加comments-->点击下方commit按钮”

git 标签的命令使用

git add .
git commit -m "comment"
git push origin master
git tag -a "v1.1" -m "1.1"
git push origin v1.1


git tag # 在控制台打印出当前仓库的所有标签
git tag -a "v1.1" -m "add v1.1" # -m选项添加注释信息  添加一个tag
git tag -l 'v1.1'  # 搜索符合模式的标签
git push origin [tagname]
git push [origin] --tags  # push所有tag  origin可省略

git tag -d tag-name  # 删除本地tag
git push origin :refs/tags/tag-name  # 删除远程tag
eg:git push origin :refs/tags/v1.1

创建远程gitee仓库

选择线上仓库

1.注册码云账号并登录:https://gitee.com/
2.创建仓库(课堂截图)
3.本地与服务器仓库建立连接
"""
"""
1)本地配置线上的账号与邮箱
>: git config --global user.name "zhangchao"
>: git config --global user.email "zhangchao@163.com"

2)在本地初始化仓库(git init),并完成项目的初步搭建(项目架构)(一般都是项目负责人完成项目启动)
# 这个过程就是git的基础部分的本地操作

3)采用 https协议 或 ssh协议 与远程git仓库通信提交代码(一般都是项目负责人完成)
	i) https协议方式,无需配置,但是每次提交都要验证管理员账号密码
	>: git remote add origin https://gitee.com/zhangchao/liren.git  # 配置远程源
	>: git push -u origin master  # 提交本地仓库到远程源
	
	ii) ssh协议,需要配置,配置完成之后就可以正常提交代码
	>: git remote add origin git@gitee.com:zhangchao/liren.git  # 配置远程源
	>: git push -u origin master  # 提交本地仓库到远程源
	
	iii)查看源及源链接信息
	>: git remote
	>: git remote -v
	
	iv)删除源链接
	>: git remote remove 源名字 
	
注:origin远程源的源名,可以自定义;master是分支名,是默认的主分支

克隆

git clone [远程地址]
'''
执行以上命令的三个效果:
	完整的把远程库下载到本地
	创建origin远程地址别名
	初始化本地库(所以我们不需要再手动去初始化)
'''

用本地仓库首次初始化远程仓库并提交代码

本地仓库与远程仓库建立源连接
前提:本地仓库已经创建且初始化完毕(代码已经提交到本地版本库)

本机命令,添加远程源:git remote add origin ssh@*.git
	采用ssh协议的remote源
创建电脑的公钥私钥
官网:https://gitee.com/help/articles/4181#article-header0

本机命令,生成公钥:ssh-keygen -t rsa -C "*@*.com"
	邮箱可以任意填写

将本地rsa_id.pub 发送到指定机器的authorized_key文件,使用秘钥登陆机器。
 ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@机器名

本机命令,查看公钥:cat ~/.ssh/id_rsa.pub

码云线上添加公钥:项目仓库 => 管理 => 部署公钥管理 => 添加公钥 => 添加个人公钥

在Git命令行中生成公匙:

在GitHub上添加公匙:(记得将下图Allow write access勾选,不然对在创建的远程库只有读的权限,无法写入,就导致本地的代码无法添加到远程库中)

提交本地代码到远程仓库
命令:git push origin master

remote源操作

"""
1)查看仓库已配置的远程源
>: git remote
>: git remote -v

2)查看remote命令帮助文档
>: git remote -h

3)删除远程源
>: git remote remove 源名
eg: git remote remove origin

4)添加远程源
>: git remote add 源名 源地址
>: git remote add orgin git@*.git
"""

多分支开发

分支操作
"""
1.创建分支
>: git branch 分支名

2.查看分支
>: git branch -v

3.切换分支
>: git checkout 分支名

4.合并分支  
第一步:切换到接受修改的分支(被合并,增加新内容)上
eg:$ git checkout master
第二步:执行merge命令
>: git merge 分支名(修改文件的分支名)
执行完这两部操作,在一个分支上修改文件,在另外一个分支上也能同步修改的内容
5.创建并切换到分支
>: git checkout -b 分支名

6.删除分支
>: git branch -d 分支名

7.查看远程分支
>: git branch -a
"""

解决合并分支后产生的冲突

2、冲突解决
	1)当不同开发者协同开发,导致远程仓库与本地仓库的版本不一致,在pull远程仓库到本地仓库时,会出现版本冲突
	2)两个仓库不同版本中,出现了相同文件的修改情况,会出现文件的冲突
	3)同一文件的修改,代码有重叠,一定会产生代码冲突,打开冲突的文件,文件中会表示冲突的开始与结束,分割线上下分别是冲突的代码
	>>>>>>>>>>header
	===========
	<<<<<<<<<<1321adsa21
        第一步:编辑文件,删除特殊符号
    	第二步:把文件修改到满意程度
    	第三步:git add [文件名]
    	第四步:git commit-m "注意信息"
    	注意:此时,commit一定不能带具体的文件名
	4)冲突的解决没有固定的结果,但是要将冲突的标识删除,根据代码实际情况,线下沟通,整合代码即可

线上分支合并

Git global setup
git config --global user.name "Administrator"
git config --global user.email "1101172195@qq.com"

Create a new repository
git clone http://re_gitlab.clobotics.com/wind/wind_app.git
cd wind_app
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

Push an existing folder
cd existing_folder
git init
git remote add origin http://re_gitlab.clobotics.com/wind/wind_app.git
git add .
git commit -m "Initial commit"
git push -u origin master

# 做此设置,push/pull代码就可以省略origin master
git push --set-upstream origin master

# 直接 git push/pull
git push 推送代码到远程
git pull # 拉取代码到本地


Push an existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin http://re_gitlab.clobotics.com/wind/wind_app.git
git push -u origin --all
git push -u origin --tags
posted on 2020-01-18 17:23  jueyuanfengsheng  阅读(230)  评论(0编辑  收藏  举报