菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
0
0

git使用(git命令)

原创
05/13 14:22
阅读数 2042

1. git介绍

● git 是对文件进行版本管理,解决代码版本管理问题,代码合并问题。(多人协同开发,合并代码)
● git:是分布式管理,控制的对象是开发的项目代码。每个客户端都能进行版本管理(每一个节点都有客户端和服务端)
● svn:集中管理,它分客户端和服务端,只能依附于服务端进行版本管理(必须都要提到服务端上去)

2. git安装

官网地址:https://git-scm.com/download/win
图片.png

安装时一路点击下一步,安装完后点右键会看到多出两个git菜单,说明安装成功了。
图片.png

3. git,gitlab,gitee,github区别

● git:是一种版本控制系统,版本管理软件,是一种工具
● github:全球最大的开源代码仓库。是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费
● gitee:码云,国产版github,中国最大的开源代码托管平台。支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费。
● gitlab:是一个 基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发

4. git工作流程

● 工作区 暂存区 版本库
● 工作区修改的内容(删除,新增,修改)—> 提交到暂存区—> 提交到版本库
● 从版本库到服务器版本库最重要的两个步骤:提交和拉取 完成本地与服务器代码同步
● 所有开发者与服务器同步。就代表所有开发者间接代码同步,团队开发

● git init # 创建git仓库
● git status  # 红色,绿色,没有变化
● git add . # 把工作区发生变化的提交到暂存区
● git commit -m ‘注释’ # 把暂存区所有的数据提交到版本库
● git log # 查看日志,查看版本变化的日志
● git reflog  # 查看日志,以简略形式显示日志

● git checkout . # 恢复工作区的更改:慎用!
● git reset HEAD # 把暂存区更改拉回到工作区:少用
● git reset --hard 版本号 # 把工作区内容变成某个版本

工作区:开发程序代码的,创建、编写、删除文件 # 工作区提交到暂存区 git add .
暂存区:内存中临时存储 # 暂存区提交版本库 git commit -m ‘提交的信息注释’
版本库:本地开发的代码 # 版本回滚 git reset --hard 版本号
服务器版本库:远程参考,服务器共用的代码

5. git基本命令

1 创建出一个工作区,在里面操作文件

初始化:

git init 文件夹名  # 初始化仓库,以后这个文件夹就被git管理了,生成一个隐藏的.git文件夹

(如果没有这个文件夹,该命令就是在目录中创建新的 Git 仓库。即生成一个空文件夹,并且里面带.git文件夹)

初始化:

git init    # 不带文件夹,当前路径全被管理

2 查看状态

    git status 

-红色表示变化了,没有提交到暂存区。
比如修改了dev.txt文件,还未提交到暂存区,会显示红色的modified:dev.txt
-绿色表示在暂存区,没有提交到版本库
-如果没有变化,表示所有代码被版本管理了
红色表示未被管理
绿色表示提交到暂存区了

3 从工作区,提交到暂存区

    git add s1.py  # 只提交s1.py 到暂存区
    git add .      # 把工作区所有更改都提交到暂存区

4 把暂存区提交到版本库

    git commit -m '注释'      # m是message

5 查看日志

    git log    # 查看版本变化的日志
    git reflog  # 查看到所有历史版本信息

注意:git log 和 git reflog的区别

git log 命令可以显示所有提交过的版本信息,如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息
git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

6 恢复到某个版本(用的比较多)

    git reset --hard 版本号    # 版本号通过可以获得,恢复的时候只需要版本号前面几个字母就可获得

7 把工作区的内容恢复到版本最后状态(回滚到版本最新的记录)

    git checkout .  

把a.txt的新增提交到版本管理,
新建b.txt,在a中再添加一行记录
当输入git checkout .
文件会怎么变?

恢复到提交版本的位置,a就是空的了,b因为没有被git管理(新增的时候没有被记录),所以操作不了它,它原来是什么样还是什么样,即现在看到两个空的a和b

git reset HEAD . 这个用的比较少,是从暂存区拉回来

8 空文件夹不会被git管理,里面一定要有文件才会被管理

9 设置用户和邮箱(增加作者信息)

全局:

    git config --global user.name '用户名'
    git config --global user.email '用户邮箱'
    # 在用户家路径的.gitconfig这可以看到

局部:

    git config  user.name '用户名'
    git config  user.email '用户邮箱'

在当前仓库的.git 文件夹下config
局部有,优先用局部用户信息,局部没有,用全局的

10 写了一堆东西,没有提交到版本库(没有被版本管理起来),删掉之后,git checkout . 也不会有,因为它没有记录,所以要先提交到版本库。

6. 忽略文件(过滤文件)

● Git工作目录中,有些文件必须要有,但又不能提交它们,不想被被git管理,就可以设置忽略文件
● 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名放进去,Git就会自动忽略这些文件

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

‘ * ’ 代表任意字符
? 代表一个字符
python中一般忽略文件:.idea /logs/*.log /script pycache
忽略之后就会变黄了

eg:

a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
‘ * x* ’:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
a.tx? :?表示一个字符 a.txt a.txx

7. git分支

一般公司 主分支master只用来发版,从主分支拉出来一条dev开发分支,开发就在dev分支上去操作,提也是提到dev分支上,master分支不会受影响,主分支不需要记录开发的过程。等要上线一个新功能,再合并到master主分支,然后再发到服务器上。

冲突:

从主分支上拉下dev分支后,主分支上也修改提交了一些东西,然后dev分支又去合到主分支,这时候分支合并可能就会出冲突。从master分支上拉dev分支的时候,最好工作区所有内容都被版本管理起来后再拉分支,然后再操作。如果还有很多东西没有提交,就开始拉分支,这就乱套了。

在master分支上 git status 查看没有其他颜色,说明已经都被管理了。

要删除dev分支,要切到master上,在dev分支上无法删除自己

创建分支

    git branch 分支名
    git branch dev     # 创建一个dev分支

查看分支

    git branch        # 星号 在绿色的分支名  代表目前在这个分支上

切换分支

    git checkout master    # 切换到master分支(此时后面dev分支操作的看不到)
    git checkout dev       # 切换到dev分支(dev操作的东西又能看到了)

合并分支(重点!)

    git merge dev

把dev合并到master,先切换到master上(git checkout master)
这里不要把master合到dev上去了,要是合反了退回去再重新合。每合一次会生成一个新版本,可以切换到这个版本上,再从这个版本上重新合。以上操作都会有记录)
可以先git branch查看在哪个分支上 , 确保是在master分支上

删除分支

    git branch -d dev    # 删除dev分支要先切到master分支上 git checkout master。

!!!千万注意不要把maser分支删掉了

补充linux常用命令:

cd 目录名: 切换到某目录下
mkdir a:   在当前工作目录下创建a文件夹
touch dev.txt :新建dev.txt文件
    
vi dev.txt:进入一般模式,按i进入输入模式,可以输入内容
(在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示)
按ESC按钮回到一般模式,再按:wq存储后离开vi  :q,是不保存退出。  :q!是不保存强制退出

rm -rf a: 删除a及a目录下所有文件,并且不用确认

8. 远程仓库

也可以使用github 或 gitlab(公司自己内部搭了一个gitee)
这里用gitee作为远程仓库
在gitee上创建一个空的远程仓库。
不需要勾选点初始化仓库,设置模板,选择分支模型这些,就直接点创建就好了。不用初始化readme文件,这些都自己弄。

设置账号和邮箱(git全局设置)

git config --global user.name "tutu"
git config --global user.email "123@qq.com"

如果本地没有仓库,创建git仓库

mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "first commit"

添加远程仓库 (连接远程仓库,只需要做一次,以后只需要操作push和pull)
设置远程仓库:

git remote add origin 仓库地址(https/ssh)

eg:
git remote add origin https://gitee.com/xx/test.git # origin是给远程仓库起的名字

把本地的master,提交到远程origin仓库。

(需要输入用户名密码,正常情况,只需要输入一次,以后就保存了)

 git push origin master # 把master分支推到远程仓库 可以按tab键自动补齐

首次推的时候,会跳出来要求输入gitee的用户名和密码,然后就会保存到电脑凭据里,以后再提就不需要输了。
控制面板–用户账户–凭据管理器–Windows凭据 (只要添加过一次,就会永久保存在本地)

如果本地有仓库

cd existing_git_repo
git remote add origin https://gitee.com/xx/test    # https是仓库地址    
git push origin master

查看本地设置的远程仓库

git remote

删除本地设置的远程仓库

git remote remove  origin 远程仓库名字

从远程仓库拉取代码

git pull origin master    # 从远程的origin拉到本地的master

注意:增加了远程仓库,最开始只需要新增一个远程仓库,以后只需要pull拉取代码,和push推送本地代码到远程

9. ssh连接远程(公司常用)

推送和下载,使用https协议,需要输入用户名,密码的方式
现在使用ssh连接远程

不需要再输入用户名密码,但是需要配置公钥私钥(非对称加密)

本机生成公钥私钥(操作系统使用命令)

公钥配置在自己的远程仓库

删除之前的https的origin远程源,再增加一个ssh的,增加命令:

  git remote add orgin 仓库地址(ssh)

  git push origin master # 往上推代码
  git pull origin master # 往下拉代码  

如果公司用的是gitlab,需要有一个gitlab账号,可能是领导注册好了(自己去修改密码),或者是自己去注册,公司内网有个地址去注册一下。
然后在本地生成公钥和私钥,把公钥配置进去,配置的位置和gitee差不多。
配上之后,以后拉代码和提代码就不需要输用户名和密码了

发表评论

0/200
0 点赞
0 评论
收藏