zoukankan      html  css  js  c++  java
  • git命令

    1.特点
    (1)版本控制
    多人同时开发代码,解决找回历史代码的问题
    (2)分布式
    同一个git仓库,可以分布到不同的机器上。(分布式:即使中央服务器挂掉了,个人电脑仍能工作;集中式不行)

    2.基本操作

    (1)创建版本库
    git init
    新建一目录。在这个目录下创建一版本库:git init
    这样就能管理这个目录下的代码。

    (2)使用
    在版本库的目录下创建1文件code.txt
    创建版本:
    a. git add code.txt
    b. git commit -m '版本1'
    #-m后是 说明信息

    查看版本创建的记录
    git log
    git log --pretty=oneline #只有一行
    修改文件后 再次add和commit,然后查看,有了变化。
    (新版本只记录相对于前一版本的变化,后一版本 依赖 前一版本)

    (3)版本回退
    有个HEAD指针指向最新的版本。HEAD的前一个版本就可以使用HEAD^来表示。前两个使用HEAD^^表示。
    HEAD~1 可以表示前1个版本。HEAD~10 表示前10个版本。
    git reset --head HEAD^ #回退到上一个版本

    现在又想回到 版本2,(版本2没删),但用 HEAD 回不去了。
    git reset --hard 版本编号 #只要有版本2 的版本编号就能回去。 (版本编号前几位就行)
    但此时用 git log 找不到 版本2的版本号了, 要用:
    git reflog #退出终端 也可以看到之前的 操作记录

    (log是查看版本记录,reflog是查看操作记录)

    (4)工作区与版本库
    工作区:电脑中的目录,比如git_test目录,就是个工作区。编辑文件时,就在工作区里进行。
    版本库:工作区里的隐藏目录.git,就是版本库。
    版本库 里有个重要区域,就是 暂存区。
    git add 就是把 文件的修改 添加到 版本库的暂存区 里。
    git commit就是把 暂存区的修改 提交(所有的),创建一个 版本记录 。
    创建一个版本记录之前,可以多次把 文件的修改 添加 到暂存区。最后一次提交,创建版本记录。

    先在工作区做多个操作,
    git status 查看工作区的信息(未添加和提交的) #是红色的
    untracked files代表从来没有add过,git无法帮助管理。

    git add 多个文件 (或者是目录)
    add给暂存区后,再git status,是绿色的了
    此时git commit就可以一次性的把所有修改提交创建一新的版本记录了
    再git status ,就是干净的

    (5)撤销修改
    看git status 的提示
    a.在工作区撤销
    改完一个文件,想撤销修改(在工作去中,还没有add到暂存区 status是红色的)
    git status里有提示
    git restore 文件名 #丢弃工作区的改动
    此时工作区也干净了。
    b.在暂存区撤销
    git restore --staged 文件名 取消暂存到工作区
    git checkout -- 文件名 丢弃工作区的改动
    git status 工作区是干净的,此时最开始的改动也没了
    c.如果版本记录撤销
    版本回退


    (6)对比文件的不同
    a.对比 工作区和某个版本中文件 的不同
    git diff HEAD -- 文件名
    没有-和+,表示两个文件都有的内容。
    -代表HEAD版本多的内容
    +代表工作区多的内容

    b.对比两个版本之间的不同
    git diff HEAD HEAD^ -- 文件名
    -代表当前版本HEAD多的code
    +代表上一版本HEAD^多的code
    这个-、+前面有提示。(版本位置不同,-+也不同)

    (7)删除文件
    对文件的增删改都是在工作区的
    git rm替换成git add
    删除文件也是和之前一样 工作区---》暂存区----》版本记录。

    小结:
    创建版本仓库:
    git init .git目录

    版本创建
    git add 文件或者目录
    git commit -m '版本说明信息'

    查看版本记录
    git log

    查看操作记录
    git reflog

    版本回退
    git reset --hard HEAD^
    或者 git reset --hard 版本序列号

    工作区、暂存区和版本库
    编辑、删除文件都在工作区
    git add 是把工作区的修改放入暂存区
    git commit是把暂存区的修改一次性做一次的版本记录

    管理修改
    git commit只会把暂存区的修改提交到版本记录中
    撤销修改

    直接丢弃工作区的改动:
    git restore 文件名

    修改已经加到暂存区,但没有commit
    git restore --staged 文件名 #先撤销暂存
    git checkout -- 文件名 #再丢弃工作区的改动

    已经创建版本记录:
    版本回退
    对比文件的不同:

    对比工作区和版本文件的不同:
    git diff HEAD -- 文件名

    对比两个版本之间的文本
    git diff HEAD HEAD^ -- 文件名
    (注意提示的+ -)

    删除文件
    也要添加暂存(git rm)在提交到版本记录中

    注:创建完文件后要把文件放入到暂存区里去,否则做的修改不会知道。(这样git才会管理这个文件)


    3.git分支
    (1)原理
    分支就是条流水线,互不干扰的。重合叫做分支的合并
    git把我们之前每次提交的版本串成一条时间线,这条时间线就是一个分支。
    主分支 master
    HEAD严格来说不是指向当前版本,而是指向master,master指向版本。
    当创建新分支时,例如dev时,git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。
    git创建一个分支很快,因为除了增加一个dev指针,改变HEAD的指向,工作区的文件都没有任何变化。
    不过,创建分支后,对工作区的修改和提交就是针对dev分支了,dev指针改变,而master指针不变。
    分支dev工作完成了,就可以把dev合并到master上。直接把master从原来位置移到dev的位置。
    合并之后,可以删除分支

    (2)基本操作
    git branch
    查看当前有几个分支,并且看到在哪个分支下工作

    git checkout -b dev
    创建一个分支dev并切换到其上进行工作 ----》创建并切换:创建一个dev指针,切换指让HEAD指向dev---》很快
    这个分支里面,之前的master的记录都有。
    然后再修改提交等操作

    git checkout master
    切换回master

    git merger
    合并分支(快速合并)---》把master指针往dev一挪
    有些时候不能快速合并

    git branch -d dev
    删除dev分支

    (3)合并冲突
    先创建一分支并切换 git checkout -b dev
    修改再提交
    切换回主分支 git chekout master
    主分支这是没有合并,而是也修改提交了。
    这样分支和主分支合并(快速合并时)就出现冲突。 git merge dev

    解决方式:
    手动解决
    在文本中有三行的提示信息,表示是哪个分支的
    手动清除,给多余的行数删掉。
    在add和commit就行了。
    在两个分支上都有了新的提交,并且修改的是同一个文件---》就会产生冲突。a

    git log --graph --pretty=oneline 查看分支的图

    (4)分支管理策略
    通常,合并分支时,git会用快速合并的模式;有时快速合并不能成功而且合并时没有冲突,这个时候git会帮我们合并之后做一次新的提交。

    要输入一个合并的信息。
    ctrl+x退出

    如果要强制禁用快速合并(fast forward)模式,git就会在合并merge的时候生成一个新的提交commit,这样,从历史分支上就可以看出分支信息了。
    禁用快速合并:
    git merge --no--ff -m '说明信息' dev

    (5)bug分支
    每个bug需要一个临时分支来进行修复,修复之后再合并分支,删掉临时分支。

    git提供stash功能,可以把当前工作现场“存储”起来,等以后恢复现场后继续工作。
    stash后工作区是干净的。可以切换到其他分支,做其他的bug。
    为保存修复bug的分支的历史记录,要禁止快速合并。合并之后有一次新的提交。(删除了分支也有历史记录)
    修复完bug,就可以到之前存储的那个分支去工作。
    git stash list 列出保存的工作现场
    git stash pop 恢复现场

    注意:
    出现bug时,会通过创建新的bug分支进行修复,然后合并(禁止快速合并),最后删除。
    当手头工作还没有完成时,先把工作现场保存git stash,然后去修改bug,修复后,再git stash pop去恢复工作现场。

    (6)小结:
    分支概念:
    相当于工厂的流水线;分支之间互不影响
    基本操作命令:
      查看
      创建
      切换
      创建并切换
      合并
      删除
    分支合并冲突:
    两个分支都有了新的提交记录,并且修改的是同一个文件,就会起冲突。
    解决冲突:
      手动处理,并提交
    分支管理策略:
      合并时默认执行快速合并
      有些时候需要禁止快速合并,加上--no--ff

    bug分支:
    修复bug之前保存工作现场,用git stash
    切换到bug所在分支,并创建切换到一临时分支(修复bug),修复完后切换回bug所在分支,并合并临时分支的内容(禁止快速合并),删除临时分支
    切换回工作分支,恢复工作现场 git stash pop


    4.github
    (1)创建仓库
    文件.py,但在运行时会产生.pyc,和项目代码没有关系。但是如果有这个文件git会提示该文件没有别跟踪,管理
    不想让git管理这些.pyc这些文件,就在目录下添加.gitignore文件。(创建仓库时可选择的) 选python

    (2)添加ssh账户
    创建好仓库后,经常要使用自己的电脑和github交互。交互之前需要把自己的ssh账户添加到
    github的账户里面。

    头像的settings有个SSH and GPG keys,点进去,随便起名字,拷贝自己电脑的ssh公钥

    生成自己电脑上的ssh公钥。
    在git上的用户名和邮箱改为github上的
    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"
    生成ssh密钥
    ssh-keygen -t rsa -C "邮箱地址"

    id_rsa是私钥 自己保留
    id_rsa.pub是公钥,把其添加到github上

    (3)克隆项目
    克隆时地址选择ssh的,不要https的,因为有ssh公钥.
    git clone ssh克隆地址 ---》先切换到单独的目录下

    (4)推送代码
    开发
    通常开发不在master上开发,而是创建一个自己的分支。
    git branch
    git checkout -b yq
    每天在自己的分支上开发。

    几天开发结束后,在本地做个提交
    git add
    git commit -m 一个版本

    推送:
    git push origin 分支名称(yq) #origin代表远程的分支,即github

    (5)跟踪远程
    git branch --set-upstream-to=origin/yq yq 让本地的yq分支跟踪远程的yq分支
    再git status就会告诉与上游分支的区别
    当跟踪远程时,自己这有改变,提交到本地仓库后,
    可以直接git push,不用写后面的origin等内容

    (6)拉取代码
    git pull origin 分支名称
    会下载远端分支并且合并本地所在的分支。

  • 相关阅读:
    C#系列之聊聊.Net Core的InMemoryCache
    函数式编程之-重新认识泛型(2)
    函数式编程之-重新认识泛型(1)
    ThreadLocal源码深度剖析
    使用ThreadLocal
    详解Redis中两种持久化机制RDB和AOF(面试常问,工作常用)
    Cassandra
    一致性HASH算法在分布式应用场景使用
    柔性分布式事务关于异步解决方案MQ版
    AtomicReference
  • 原文地址:https://www.cnblogs.com/yq055783/p/13054371.html
Copyright © 2011-2022 走看看