zoukankan      html  css  js  c++  java
  • Git常用命令

    一、Git介绍

    Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件,下载安装参见:http://git-scm.com/

    GitHub是一个基于Git的远程文件托管平台

    Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景:

    • 无GitHub:在本地 .git 文件夹内维护历时文件
    • 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库

    二、单机模式

    Git把管理的文件分为了两个区域四个状态

    工作区:当前开发程序所在目录称为工作区,即:工作开发都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,如果程序中文件做任何操作(增、删、改),文件状态均会被检测到,可以使用 (git status)命令查看

    版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,那么就是执行 【git add .】 将所有文件提交到暂存区,然后再执行(git commit -m '描述信息')提交到版本库的分支即可,之后可以使用(git log)命令查看版本记录

    $ mkdir crazyjump    #创建工作区目录
    $ cd crazyjump
    
    git init   #初始化,表示即将对当前文件夹进行版本控制。
    git status  #查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
    git add 文件名  #将指定文件添加到版本库的暂存状态。
    git commit -m '提交描述信息'   #将暂存区的文件提交到版本库的分支。
    git log  #查看提交记录,即:历史版本记录

    代码回滚:

    $git log
    commit 14b216f0ce9701f405853058727c8ec164a6563d (HEAD -> master)
    Author: Your Name <crazyjump@163.com>
    Date:   Mon Jan 7 19:07:11 2019 +0800
    
        ftp第二次
    
    commit 4c4bed87c264cc864c8fb9f9a4c44dd4d3ad0f97
    Author: Your Name <crazyjump@163.com>
    Date:   Mon Jan 7 19:04:43 2019 +0800
    
        ftp第一次
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git reset --hard 4c4bed87c264cc864c8fb9f9a4c44dd4d3ad0f97 #(回滚版本命令)
    HEAD is now at 4c4bed8 ftp第一次
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git log
    commit 4c4bed87c264cc864c8fb9f9a4c44dd4d3ad0f97 (HEAD -> master)
    Author: Your Name <crazyjump@163.com>
    Date:   Mon Jan 7 19:04:43 2019 +0800
    
        ftp第一次
    
    Administrator@chb-PC MINGW64 /e/FTP (master)

    这个时候如果需要再次回到ftp第二次的版本则:

    $ git reflog
    4c4bed8 (HEAD -> master) HEAD@{0}: reset: moving to 4c4bed87c264cc864c8fb9f9a4c44dd4d3ad0f97
    14b216f HEAD@{1}: commit: ftp第二次
    4c4bed8 (HEAD -> master) HEAD@{2}: commit (initial): ftp第一次
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git reset --hard 14b216f   #回滚命令
    HEAD is now at 14b216f ftp第二次
    
    Administrator@chb-PC MINGW64 /e/FTP (master)

    三、保存多份代码方式

    3.1、方式一(stash)

    stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区

    $ git stash   #线上出现bug将开发到一半的工作区保存
    Saved working directory and index state WIP on master: d75bd2b 更改
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git stash pop    #修改bug后再将之前开发一半的代码拿回工作区
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   sina.txt
            modified:   wx.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    Dropped refs/stash@{0} (a9b99f0bb5a4101721e8dbcc005aef4df312ec04)
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    

     ps:执行 git stash pop 命令时可能会遇到冲突,因为在紧急修复bug的代码和通过stash存储在“某个地方”的代码会有重合部分,所以执行 git stash pop 时候就会出现冲突,有冲突解决冲突即可。

    stash相关常用命令:

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

    3.2、方式二(branch)

    branch称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支

    branch相关常用命令:

    • git branch 分支名称             创建分支
    • git checkout 分支名称          切换分支
    • git branch -m 分支名称        创建并切换到指定分支
    • git branch                          查看所有分支
    • git branch -d 分支名称         删除分支
    • git merge 分支名称              将指定分支合并到当前分支
    $ git branch  #查看分支(目前在master分支)
    * master
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git branch dev   #创建dev分支,即:拷贝一份当前所在分支代码到新分支
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git branch
      dev
    * master
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git checkout dev   #切换到dev分支
    Switched to branch 'dev'
    M       sina.txt
    M       wx.py
    
    Administrator@chb-PC MINGW64 /e/FTP (dev)
    $ git status    
    On branch dev
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   sina.txt
            modified:   wx.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    Administrator@chb-PC MINGW64 /e/FTP (dev)
    $ git add .   # 将修改文件添加到版本库的暂存区
    
    Administrator@chb-PC MINGW64 /e/FTP (dev)
    $ git commit -m "提交"    # 将暂存区的内容提交到当前所在分支,即:dev分支
    [dev aa1d2bf] 提交
     2 files changed, 4 insertions(+), 2 deletions(-)
    
    Administrator@chb-PC MINGW64 /e/FTP (dev)
    $ git status
    On branch dev
    nothing to commit, working tree clean
    
    Administrator@chb-PC MINGW64 /e/FTP (dev)
    $ git checkout master    #切换到master分支
    Switched to branch 'master'
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git merge dev     #将dev分支合并到master(可能会有冲突)
    Updating d75bd2b..aa1d2bf
    Fast-forward
     sina.txt | 3 ++-
     wx.py    | 3 ++-
     2 files changed, 4 insertions(+), 2 deletions(-)
    

      

    四、远程托管到GitHub

    基于GitHub实现代码托管,需要一下步骤:

    • 注册GitHub
    • 创建仓库,创建完仓库后会有一个URL代指该仓库,如:

     将master和dev推送到github

    $ git remote add ftp https://github.com/Crazyjump/Ftp.git   
    #新建别名ftp,连接地址为github上所建仓库地址
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git push ftp master
    #将master推送到github,注意这时候需要输入账号密码
    Enumerating objects: 51, done.
    Counting objects: 100% (51/51), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (40/40), done.
    Writing objects: 100% (51/51), 9.19 KiB | 671.00 KiB/s, done.
    Total 51 (delta 10), reused 0 (delta 0)
    remote: Resolving deltas: 100% (10/10), done.
    To https://github.com/Crazyjump/Ftp.git
     * [new branch]      master -> master
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    $ git push ftp dev  
    #再将dev推送到github
    Total 0 (delta 0), reused 0 (delta 0)
    remote:
    remote: Create a pull request for 'dev' on GitHub by visiting:
    remote:      https://github.com/Crazyjump/Ftp/pull/new/dev
    remote:
    To https://github.com/Crazyjump/Ftp.git
     * [new branch]      dev -> dev
    
    Administrator@chb-PC MINGW64 /e/FTP (master)
    

     结果:

    将github上的代码拉到本地:

    $ git clone https://github.com/Crazyjump/Ftp.git
    #将github上的代码第一次拉取到本地
    Cloning into 'Ftp'...
    remote: Enumerating objects: 51, done.
    remote: Counting objects: 100% (51/51), done.
    remote: Compressing objects: 100% (30/30), done.
    remote: Total 51 (delta 10), reused 51 (delta 10), pack-reused 0
    Unpacking objects: 100% (51/51), done.
    
    Administrator@chb-PC MINGW64 /i/ftphome
    $ git remote add ftp https://github.com/Crazyjump/Ftp.git
    fatal: not a git repository (or any of the parent directories): .git
    $ ls
    Ftp/
    
    Administrator@chb-PC MINGW64 /i/ftphome
    $ cd Ftp/
    
    Administrator@chb-PC MINGW64 /i/ftphome/Ftp (master)
    $ ls
    11.txt  ddd.txt  ftpclient/  ftpserver/  sina.txt  wx.py
    
    Administrator@chb-PC MINGW64 /i/ftphome/Ftp (master)
    
    $ git branch dev 
    #创建dev
    
    Administrator@chb-PC MINGW64 /i/ftphome/Ftp (master)
    
    Administrator@chb-PC MINGW64 /i/ftphome/Ftp (master)
    $ git checkout dev  #切换到dev
    Switched to branch 'dev'
    
    Administrator@chb-PC MINGW64 /i/ftphome/Ftp (dev)
    $ git pull ftp dev  
    
    From https://github.com/Crazyjump/Ftp
     * branch            dev        -> FETCH_HEAD
     * [new branch]      dev        -> ftp/dev
    Already up to date.
    
    Administrator@chb-PC MINGW64 /i/ftphome/Ftp (dev)
    $ git pull ftp dev   #拉取远程github上的dev到本地并合并 
    

     相关命令:

    git clone https://github.com/Crazyjump/Ftp.git    
    #  第一次将项目从GitHub中获取,默认获取到得只有master分支
    
    git checkout dev         # 切换到dev分支
    git pull ftp dev       # 从远程GitHub仓库获取dev分支最新内容,并合并到本地
    git push ftp master  # 将本地master分支内容以及版本信息推送到GitHub
    
    git fetch ftp dev      # 从GitHub仓库获取dev分支最新内容到版本库的分支
    git merge ftp/dev     # 将版本库的分支内容合并到工作区
    
    #上文执行过程中执行 【git pull ftp 分支名称】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】
    
    #(git rebase ftp/分支) 不产生提交分叉,保持提交记录整洁
    

      

    五、其他补充:

    5.1、.gitignore  文件定义不需要管理文件

       以斜杠“/”开头表示目录;
    
      以星号“*”通配多个字符;
    
      以问号“?”通配单个字符
    
      以方括号“[]”包含单个字符的匹配列表;
    
      以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
    

    5.2、版本命令相关

        git tag -a v1.0 -m '版本介绍'        #本地创建版本v1.0
        git show v1.0                            #查看
        git tags -n                                 #查看本地Tag
        git tag -l 'v1.4.2.*'               #查看本地Tag,模糊匹配
        git tag -d v1.0                      #删除Tag
        git push ftp :refs/tags/v0.2     #更新远程tag
        git checkout v.10                    #切换tag
    
        git push ftp  --tags   #
        git pull ftp  --tags
        
        git clone -b v0.1   #拉1.0版本的代码
    

     为ftp创建一个版本:

    $ git tag -a v1.0 -m 'ftp1.0'
    
    Administrator@chb-PC MINGW64 /i/ftphome/Ftp (master)
    $ git push ftp --tags
    Enumerating objects: 1, done.
    Counting objects: 100% (1/1), done.
    Writing objects: 100% (1/1), 158 bytes | 158.00 KiB/s, done.
    Total 1 (delta 0), reused 0 (delta 0)
    To https://github.com/Crazyjump/Ftp.git
     * [new tag]         v1.0 -> v1.0
    

     结果:

    5.3、github中可以通过要去协助或者创建组来协同开发,另外分支代码推送到远程仓库时候如果出现推送失败一般就是:最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从远程仓库上抓下来,然后,在本地合并,解决冲突,再推

  • 相关阅读:
    容器类总结
    CopyOnWriteArrayList
    ConcurrentHashMap
    nginx 反向代理,支持跨域,前后分离
    H5新特性 input type=date 在手机上默认提示显示无效解决办法
    浅析angular,react,vue.js jQuery使用区别
    Vue 微前端&微服务解决方案,远程组件服务化
    webspack 系统学习笔记
    2019年NodeJS框架Koa和Express选型对比
    转载:微前端的技术选型和对比
  • 原文地址:https://www.cnblogs.com/crazyjump/p/10235131.html
Copyright © 2011-2022 走看看