git使用(git命令)

1. git介绍

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

2.  git安装

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

 

 

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

 

 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主分支,然后再发到服务器上。

冲突1:
从主分支上拉下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差不多。
配上之后,以后拉代码和提代码就不需要输用户名和密码了

'''
posted @ 2022-11-20 16:11  Tutu007  阅读(138)  评论(0编辑  收藏  举报