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把最新的提交从远程仓库上抓下来,然后,在本地合并,解决冲突,再推

  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/crazyjump/p/10235131.html
Copyright © 2011-2022 走看看