zoukankan      html  css  js  c++  java
  • Git命令详解

    Git命令

    Git是一个免费和开源的分布式版本控制系统,它的设计是为了处理从小到大的项目,包括速度和效率。Git很容易学习,而且具有闪电般的快速性能。它超越了像Subversion、CVS、Perforce和ClearCase这样的配置管理工具,具有廉价的本地分支、方便的登台区域和多个工作流。

    创建git版本命令流程

    1.git init   将当前的目录变成git可以管理的仓库
    2.git config user name "whatmini"   设定用户名称
    3.git config user.email "lijianszglad@163.com"  设置电子邮箱
    4.git add *  添加文件到暂存区
    5.git commit -m "some init msg"    提交文件到当前的分支
    

    以上为创建git版本库流程,git可以多次add文件,一次commit

    查看当前状态

    1. git status   	掌握仓库的当前状态
    2. git diff *		检查上一次对文件做的修改
    

    版本的回退

    1. git log   	查看版本库的修改记录
    2. git log --pretty=oneline  用commit id(版本号)显示修改记录
    3. git reset --hard HEAD^  代表回退到上一版本(HEAD^^为上上版)
    4. git reset --hard 12323  回退到版本号为12323的版本
    5. git reflog   用来记录每一次命令(查询某次修改的版本号)
    

    如图所示:

    通过add将文件由工作区→暂存区

    commit将文件由暂存区→分支(git自动创建了叫master的分支)

    HEAD为一个指针指向当前的版本

    git status 为查看暂存区是否清空

    需要知道的是Git跟踪管理的是修改,而不是文件

    撤销修改

    场景A

    git checkout -- *的两种情况:

    1.* 文件修改后还未放到缓存区,撤销修改就回到和版本库相同

    2.* 文件已添加到暂存区,又作了修改,撤销修改就到暂存区的状态

    场景B

    1.先 git reset HEAD * 把暂存区的修改撤销掉,重回工作区

    2.后 git checkout --* 丢弃工作区的修改

    以上先后两步为将文件add到暂存区,而没有commit时的撤销修改

    场景C

    若已经将文件从暂存区commit到版本库,采用版本回退到上一个版本前提是没有将本地版本库推送到远程,若已推送远程,则无法撤销

    删除

    git rm * 		用于删除一个文件
    

    1.误删,使用git checkout --*恢复

    2.确实要删除,使用git rm * 将其从git版本库中删除

    (git checkout -- *为用版本库版本替换工作区版本,无论修改还是删除)

    添加远程程序

    git pash origin master 	将本地master最新修改推至GitHub
    

    关联一个新的远程程序:

    git remote add origin  https://github.com/whatmini/day1.git
    

    第一次推送master分支的所有内容:

    git push -u origin master
    

    远程克隆

    Git 支持多种协议,包括http,但通过ssh支持的原生git协议速度最快

    git clone克隆一个本地库

    git clone  https://github.com/whatmini/day1.git
    

    分支管理

    Git鼓励你使用分支完成某个任务,合并后再删除分支,这和直接在master分支上工作效果一样但过程更安全

    创建与合并分支

    默认的master分支:

    Git用master指向最新的提交,再用HEAD指向master(HEAD指向当前分支)

    创建型的分支

    MacBook-Pro-4:pondo wupeiqi$ git branch dev                 # 创建新分支,即:拷贝一份当前所在分支代码到新分支
    MacBook-Pro-4:pondo whatmini$ git checkout dev               # 切换到dev分支
    MacBook-Pro-4:pondo whatmini$ vim app01/views.py             # 开发功能
    MacBook-Pro-4:pondo whatmini$ git status                     # 查看状态,即:在dev分支修改了app01/views.py文件
    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:   app01/views.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    MacBook-Pro-4:pondo whatmini$ git add .                      # 将修改文件添加到版本库的暂存区
    MacBook-Pro-4:pondo whatmini$ git commit -m '新功能开发完毕'    # 将暂存区的内容提交到当前所在分支,即:dev分支
    [dev 32b40cd] 新功能开发完毕
    file changed, 2 insertions(+) 
    MacBook-Pro-4:pondo whatmini$ git checkout master             # 切换回master分支 
    Switched to branch 'master'
    MacBook-Pro-4:pondo whatmini$ git merge dev                   # 将dev分支内容合并到master分支
    Updating 0972f4b..32b40cd
    Fast-forward
     app01/views.py | 2 ++
    file changed, 2 insertions(+)
    
    一般流程示例(上图)
    

    这里需要了解的是合并完成后,需要删除dev分支,删除dev分支就是删除dev指针

    分支解决Bug

    MacBook-Pro-4:pondo whatmini$ git branch                     # 当前在master分支
    * master
     
     
    MacBook-Pro-4:pondo whatmini$ git branch dev                 # 创建dev分支用于开发新功能
     
    MacBook-Pro-4:pondo whatmini$ git checkout dev               # 切换到dev分支
    Switched to branch 'dev'
     
    MacBook-Pro-4:pondo whatmini$ vim app01/views.py             # 开发新功能到一半,需要紧急修复Bug
     
    MacBook-Pro-4:pondo whatmini$ git add .
     
    MacBook-Pro-4:pondo whatmini$ git commit -m '新功能开发一半'
    [dev b3ac2cb] 新功能开发一半
     1 file changed, 2 insertions(+)
     
     
     
     
    MacBook-Pro-4:pondo whatmini$ git checkout master            # 切换回master分支
    Switched to branch 'master'
     
    MacBook-Pro-4:pondo whatmini$ git branch bug                 # 创建bug分支
     
    MacBook-Pro-4:pondo whatmini$ git checkout bug               # 切换到bug分支
    Switched to branch 'bug'
     
    MacBook-Pro-4:pondo whatmini$ vim pondo/settings.py          # 修改bug
     
    MacBook-Pro-4:pondo whatmini$ git add .                      # 提交bug
     
    MacBook-Pro-4:pondo whatmini$ git commit -m '紧急修复bug'      # 提交bug
    [bug f42f386] 紧急修复bug
     1 file changed, 1 insertion(+), 1 deletion(-)
     
     
    MacBook-Pro-4:pondo whatmini$ git checkout master            # 切换会master
    Switched to branch 'master'
     
    MacBook-Pro-4:pondo whatmini$ git merge bug                  # 将bug分支内容合并到master分支,表示bug修复完毕,可以上线
    Updating 0972f4b..f42f386
    Fast-forward
     pondo/settings.py | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
     
     
     
     
    MacBook-Pro-4:pondo whatmini$ git checkout dev               # 切换到dev分支,继续开发新功能
    Switched to branch 'dev'
     
    MacBook-Pro-4:pondo whatmini$ vim app01/views.py             # 继续开发其他一半功能
     
    MacBook-Pro-4:pondo whatmini$ git add .                      # 提交新功能
     
    MacBook-Pro-4:pondo whatmini$ git commit -m '继续开发完成'      # 提交功能
    [dev c0bfb27] 继续开发完成
     1 file changed, 1 insertion(+)
     
    MacBook-Pro-4:pondo whatmini$ git checkout master            # 切换回master分支
    Switched to branch 'master'
     
    MacBook-Pro-4:pondo whatmini$ git merge dev                  # 将dev分支合并到master分支
    Merge made by the 'recursive' strategy.
     app01/views.py | 3 +++
     1 file changed, 3 insertions(+)
    

    Feature分支

    开发一个新的feature(功能),最好新建一个分支,如果要丢弃一个没有被合并过的分支,可通过git branch -D 强行删除。没有合并的分支,删除后就找不到了,新功能的分支,不删除不会影响功能,只是对于结构来说比较乱

    多人协作

    git remote -v 显示可以抓取和推送的地址,如果没有推送权限就看不到push的地址

    推送分支:git push origin(远程序) master(本地库)

    推送原则:

    1. master是主分支,因此时刻要与远程同步
    2. dev 分支为开发分支,团队所有人均在上面工作,因此也需要时刻同步
    3. bug分支只用于本地修复bug,没必要推到远程
    4. feature分支是否推送,取决于是否和其他人共同开发

    抓取分支:多人协作时,大家往往都会向master和dev分支上推送各自的修改

    多人协作工作模式

    1. 其他人从远程库复制代码

       git clone https://github.com/whatmini/day1.git
      
    2. 小伙伴子啊本地的dev分支上开发,须创建远程的origin的dev分支到本地

       git checkout -b dev origin/dev
      
    3. 小伙伴用下面的命令把dev分支push远程

       git push origin branch -name 
      
    4. 若推送失败,说明其他人对同样的文件作了修改,这里通过git pull将最新的提交从origin/dev上抓下来在本地合并,解决冲突再推送(若失败(显示"no tracking in formation"),需设置dev和origin/dev分支的链接)

    5. 再次pull,git pull成功,但合并有冲突同解决冲突并在本地提交

    创建标签

    1. git tag <name> 用于创建新标签默认为新标签
    2. git tag <name> <commit id> 对指定的commit id 建立新标签
    3. git log --pretty=oneline --abbrev -commit 获取历史commit id 列表
    4. git tag -a <tagname> -m "..." 指定标签信息
    5. git tag 可以查看所有标签
    6. git <tag name> 查看标签信息
    

    操作标签

    1. git tag -d <tagname>  删除本地标签
    2. git push origin <tagname> 推送一个本地标签
    3. git push origin --tags  推送全部未推送的本地标签
    4. git push origin:refs|tags|<tagname> 删除一个远程标签
    
    branch相关常用命令:
    git branch 分支名称             创建分支
    git checkout 分支名称          切换分支
    git branch -m 分支名称        创建并切换到指定分支
    git branch                          查看所有分支
    git branch -d 分支名称         删除分支
    git merge 分支名称              将指定分支合并到当前分支
  • 相关阅读:
    idea 相关
    dns 相关
    bash 相关
    建造者模式(Builder)
    C#中out 及 ref 区别
    C# 2.0新特性
    Asp.net.Ajax控件学习
    装饰模式(Decorator Pattern)
    职责链模式(Chain of Responsibility Pattern)
    面向对象
  • 原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/7553924.html
Copyright © 2011-2022 走看看