zoukankan      html  css  js  c++  java
  • git基本使用

    一:介绍

     

    1.什么是git?

    是一种用于协同开发的版本管理工具

     

    2.git能干什么?

     

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

    • 帮助开发者合并开发的代码
    • 如果出现冲突代码的合并,会提示后 提交合并代码的开发者,让其解决冲突
     

    2种Git软件:SVN、Git

    • svn(集中式管理)
    • git(分布式管理、协同开发、版本管理)
     

    常用的git版本控制器管理代码的公共平台

    • github
    • gitee
     

    3.Github、Gitee、Gitlab的区别

    • Github:一般开源的代码都放在github,代码托管平台(公有仓库、私有仓库),公司代码一般不会放在上面
    • Gitee:中国版本的github,开源低吗放在共有仓库,有一部分公司的代码会托管到gitee的私有仓库
    • Gitlab:公司自己搭建的github,公司内部自己访问(可以用Docker拉1个gitlab的镜像跑起来)
     

    4.下载链接:https://git-scm.com/

     

    5.安装

    一路下一步即可

     

    6.整体流程

    1.有红色信息(工作区有内容),就执行 add
    2.全绿信息(内容全部在暂存区),才执行 commit
    3.只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本

     

    一:核心操作

     

    1.初始化仓库

    git init
    .git目录默认隐藏,可以通过命令ls -ah显示
     

    2.把文件添加到暂存区

    添加指定文件
    git add 文件名
    一次添加多个文件
    git add . 

    3.提交暂存区内容到版本库

    git commit -m '本次提交的说明'

    4.把项目提交到(远程)仓储

    git push

    5.撤销暂存区提交:add的逆运算(很少使用)

    ①撤销所有暂存区的提交
    git reset HEAD .
    ②撤销某一文件的暂存区提交
    git reset 文件名
    ③撤销所有暂存区的提交
    git reset .

    6.过滤文件

    .gitignore 文件
    1.在仓库根目录下创建该文件
    2.文件与文件夹均可以被过滤
    3.文件过滤语法
    ②过滤文件内容
    文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
    /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
    ③eg:
    a.txt:项目中所有a.txt文件和文件夹都会被过滤
    /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
    /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
    *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
    空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)

    7.查看仓库当前的状态

    查看状态(红色和绿色),必须全绿再提交到版本库
    git status

    8.查看提交日志

    git log #查看版本管理日志可以看到
          

            commit(版本号) 8564d4565328ecf1097f906cb49d0ee0ee4ef956 (HEAD -> dev)
            Author(作者): <E8><A2><81><E8><B6><85> <7786966+yuan_jingchao@user.noreply.gitee.com>
            Date(日期): Tue Dec 29 08:52:44 2020 +0800




    9.回退版本

    ①回退到上一版本
    git reset --hard HEAD^(版本号)

    一般回退用法:先用git log 查看版本管理日志,再使用该命令即可

    ②回退到上上版本
    git reset --hard HEAD^^(用失败了)
    ③撤销所有暂存区的提交
    git reset .

    10.窗口关闭后回退版本

    用来记录你的每一次命令
    git reflog 详细命令

    二:用户操作

     

    1.设置全局用户

    git config --global user.name '用户名'
    git config --global user.email '用户邮箱'
    在全局文件 C:Users用户文件夹.gitconfig新建用户信息,在所有仓库下都可以使用
     

    2.设置局部用户

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

    在当前仓库下的config新建用户信息,只能在当前仓库下使用

    一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户

     

    三:分支管理

     

    1.查看远程分支

    git branch -a

    2.查看本地分支

    git branch

    3.创建并切换分支

    (加-b表示创建并切换)
    git checkout -b 分支名

    4.切换回分支

    git checkout 分支名

    5.从主分支里创建新分支

    git checkout master -b 新分支名

    6.合并某分支到当前分支

    git merge 分支名

    7.删除分支

    git branch -d 分支名
    git branch -D 分支名 (强行删除分支)

    四:git远程连接

     

    1.无仓库,需要新建

    mkdir test
    cd test
    git init
    touch a.txt
    git add a.txt
    git commit -m "添加了a.txt"
    git remote add origin 已有仓库  # 连接远程
    git push  origin master

    2.已有仓库

    cd test
    git remote add origin 已有仓库  # 连接远程
    git push  origin master

    3.查看远程仓库(没有就看不到)

    git remote

    4.线上回滚

    # 1 切换到master分支
    # 2 回滚打某个版本  git reset --hard  版本号
    # 3 强制提交代码 git push origin master -f   会强行覆盖别人写的代码

    五:解决冲突

     

    1.情况1

    A和B同时开发项目并且都将服务器的分支代码拉(pull)到自己电脑上
    A开发完后,将自己的项目推(push)到了服务器的分支
    A和B修改的是同一行代码
    B开发完后,没有先拉(pull),而是直接将自己的项目推(push)到了服务器的分支
    此时,出现了冲突,这个冲突需要由B解决
    解决方法:
    git merge A_master (在B_dev分支上操作)
    -解决冲突(删你的,同事的,合并起来)
    git add .  git commit 
    -正常了,冲突解决

    2.情况2

    master分支上a.py中的第10行代码为 x = 1
    dev分支上a.py中的第10行代码为 x = 99
    在master分支合并dev分支
    此时同一个文件的同一行代码,在2个分支不同,出现了冲突
    解决方法:
    # 手动线下合并代码并提交到远程
    git checkout master
    git merge dev 
    
    -如果出冲突,解决
        -git add .
        -git commit 
        -git push..

    五:git项目创始者和开发者

     

    1.项目创世者

    负责分支的创建和管理
     

    2.项目开发者

    把项目拉下来,继续开发
    git clone https://gitee.com/xxxxxx/xxxx.git
        -能看到完整的版本和日志控制
        -可以回复到任意版本
        
    git rest --hard 版本号
    git checkout . # 表示回到指针指向的版本,因为已经用git rest --hard把指针移动了,所以checkout .就是当前再的版本上的东西
    
     #本地新增c.txt文件
        -提交到暂存区
        -提交到版本库(没有提交到远程,远程看不到)
        -提交到远程:git push origin master
        
    # 让a文件夹中的代码成为最新的
        -git pull origin master
    重点:每次再提交代码之前,一定要先更新代码(拉),如果不拉提不上去
     

    六:ssh连接和https连接

     

    1.公司内部大部分用ssh连接

    -领导给你一个git地址(项目地址)
    -你 git clone 地址  到本地
    -改代码,改完了---》提交(禁止)
    -ssh配置,以后都不用输密码了

    2.配置如何做

    -对称加密(加密和解密用同一套秘密)
    -非对称加密(公钥和私钥),公钥加密,私钥解密
    
    -生成一对公钥和私钥(用命令)
        -https://gitee.com/help/articles/4181
        -ssh-keygen -t rsa -C "lqz@qq.com" 生成到用户家目录的.ssh文件夹下(一个公钥,一个私钥)  
        -把公钥复制出来,去码云上配置

     

    3.跟远程操作有三个命令

    git pull
    git push
    -git feacth(一般不用,他跟pull是一个东西,当作不知道)

    七:pycharm操作git

     

    1.创建一个文件夹,右键Git Bash here ,输入下面命令

    git init
    此时,会生成一个.git的隐藏文件夹
     

    2.将项目克隆下来

    git clone https://xxxxx.gitee.com.xxx.git

    3.右键 - 用pycharm打开

     

    4.点击左上角:File - Settings,进行如图操作,可以获取到Git当前版本

     

    5.2个按钮的功能

     

    6.更多功能

     

    7.一步到位的操作(修改+添加到暂存区+注释并添加到版本库+push到远程仓库)

     

    八:其他操作

     

    1.查看ssh密钥

    ①进入.ssh目录
    cd ~/.ssh
    ②查看id_rsa.pub文件
    cat id_rsa.pub

    2.克隆远程项目

    git clone 远程源地址

    3.删除文件

    ①删除版本库中的文件
    git rm filename
    ②恢复工作区中误删的文件
    git checkout -- filename

    PS:git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

     

    4.远程仓储

    ①创建ssh key密钥
    ssh-keygen -t rsa -C "youremail@example.com"
    ②在远程仓库中添加ssh公钥
    ③关联远程库
    git remote add origin git@server-name:path/repo-name.git
    ④第一次推送master分支的所有内容,此后只需要使用git push origin master即可推送最新修改
    git push -u origin master

    5.多人协作

    ①查看远程仓储的详细信息
    git remote -v
    ②推送本地分支到远程仓库
    git push origin 本地分支名

    如果发生冲突,用git pull试图合并,如果发生冲突则解决冲突,再进行推送

    如果git pull后提示no tracking information(没有追踪信息),则进行第四项,建立关联,之后pull,有冲突再合并

    ③在本地创建和远程分支对应的分支
    git checkout -b 本地分支 origin/远程分支名
    ④建立本地分支和远程分支的关联
    git branch --set-upstream 本地分支名 origin/远程分支名

    6.分支策略

    1.master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

    2.干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

    3.每个人都有自己的分支,时不时地往dev分支上合并就可以了

     

    7.git fetch和git pull的区别

    与git pull相比git fetch相当于是从远程获取最新版本到本地,但不会自动merge。如果需要有选择的合并git fetch是更好的选择。效果相同时git pull将更为快捷。

     

    九:修改已有项目的流程

     

    1.初始化仓库

    git init

    2.设置局部用户

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

    3.添加已有仓库

    git remote add origin 已有仓库

    4.把项目拉下来

    • 拉下来不是一个项目文件夹,而是项目中的许多文件和文件夹
    git pull 仓库地址

    5.修改好项目

     

    6.添加到版本库

    git add .

    7.提交注解(此次操作修改了什么等)

    git commit -m '修改的内容'

    8.推到远程仓库

    git push origin master
  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/ltyc/p/14179684.html
Copyright © 2011-2022 走看看