zoukankan      html  css  js  c++  java
  • git&github常用日常

    本文仅用作自己笔记用途,可能不系统,勿喷,教程见廖雪峰官网
    安装教程网上自行google,安装后先注册全局信息

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"

    1. git基本操作

    1.1 初始化

    $ git init                  //把某个目录变成Git可以管理的仓库
    $ git add <文件名>        //用命令git add告诉Git,把文件添加到仓库Git添加

    文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

    $ git add file1.txt
    $ git add file2.txt file3.txt
    $ git commit -m "add 3 files."

    1.2 git status

    git status命令可以让我们时刻掌握仓库当前的状态Untracked
    这里写图片描述
    这三个分别是:
    第一个是add之后但是没有commit的
    第二个是没有add的
    第三个是新文件,未被追踪的

    1.3 git diff

    git diff顾名思义就是查看difference,这里显示的是本地没有提交的和提交的版本上的差异,显示的格式正是Unix通用的diff格式

    1.4 git log

    git log命令显示从最近到最远的提交日志

    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数

    1.5 git reset

    $ git reset --hard HEAD^

    首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
    命令执行后会提醒:

    Unstaged changes after reset:
    M       README.md

    这里直接把head指针修改了,但是文件的内容没有修改,需要借助1.7小节命令将其工作区的文本文件还原(具体原理见1.6),通过git status可查看,直接checkout就可以将文本变为想还原的版本了

    –hard参数有啥意义?这个后面再讲,现在你先放心使用。

    最新的那个版本append GPL已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?

    办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL的commit id是3628164…,于是就可以指定回到未来的某个版本:

    $ git reset --hard 3628164

    Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:
    这里写图片描述

    改为指向add distributed:

    这里写图片描述

    然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。
    想恢复到新版本怎么办?找不到新版本的commit id怎么办?

    在Git中,总是有后悔药可以吃的。当你用$ git reset –hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令

    $ git reflog
    a4a4527 (HEAD -> master, origin/master) HEAD@{0}: reset: moving to a4a45
    dae796b HEAD@{1}: reset: moving to HEAD^
    a4a4527 (HEAD -> master, origin/master) HEAD@{2}: commit: the third times modify readme.md
    dae796b HEAD@{3}: commit: modify readme.md & add test2.txt
    bdacecc HEAD@{4}: commit: new file readme.md
    76b4650 HEAD@{5}: commit (initial): my first test

    注意这里前面的那个id就是后面命令执行后最新的版本号,所以就可以回到最新的了

    1.6 原理图

    这里写图片描述
    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    1.7 git checkout

    命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

    一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

    一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commit或git add时的状态。
    这里写图片描述
    使用场景:

    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

    1.8 git rm

    删除文件:

    $ git rm test.txt
    $ git commit -m "remove test.txt"

    1.9 git remote

    查看remote名称,增加-v可查看详细信息

    1.9 git last

    2. git分支管理

    廖雪峰“说”:

    分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
    现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
    其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。
    但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。

    每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

    一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点
    这里写图片描述
    而增加分支就相当于增加新的dev指针(详情

    2.1 git checkout -b

    $git checkout -b dev //-b参数表示创建并切换,上面相当于:
                         //$ git branch dev
                         //$ git checkout dev

    2.2 git branch

    git branch命令会列出所有分支,当前分支前面会标一个*号。

    2.3 git checkout master

    $ git checkout master//回到master分支

    2.4 其他git操作

    查看分支:git branch

    创建分支:git branch

    切换分支:git checkout

    创建+切换分支:git checkout -b

    合并某分支到当前分支:git merge
    –no-ff //禁用fast forward
    -m “merge信息”

    删除分支:git branch -d

    分支合并图:git log –graph
    –pretty=oneline //一行显示
    –abbrev-commit

    2.5 远程git分支clone(如GitHub)

    使用git clone后,你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支
    完整的是:

    git clone 网址
    gitcheckout -b 创建的本地分支名称 origin/分支名称 //命令前面部分和本地创建分支一样

    2.6 远程git分支创建(如GitHub)

    git push --set-upstream origin 新分支名称

    3. tag

    Git有commit,为什么还要引入tag?
    “请把上周一的那个版本打包发布,commit号是6a5819e…”
    “一串乱七八糟的数字不好找!”
    如果换一个办法:
    “请把上周一的那个版本打包发布,版本号是v1.2”
    tag应运而生!!!

    3.1 tag的基本用法

    git tag v1.0 //默认标签是打在最新提交的commit上的。
    git tag -a <tagname> -m "blablabla..."//可以指定标签信息;
    git tag v0.9 6224937 //提交打标签,对应的commit id是6224937
    git tag //查看所有标签
    git show v0.9 //查看标签信息
    git tag -d v0.1 //删除标签

    3.2 tag的远程使用(如GitHub)

    git push origin v1.0  //推送本地v1.0标签到远程
    git push origin --tags  //推送本地所有标签到远程
    
    /*远程删除tag,先在本地删除,再删除远程(好像直接远程也可以吧)*/
    git tag -d v0.9
    git push origin :refs/tags/v0.9

    4. 自定义git

    4.1 注册全局信息

    绑定自己的账号和公开自己起的名字

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"

    Git显示颜色,会让命令输出看起来更醒目

    $ git config --global color.ui true

    5. github

    5.1 在命令行创建自己的仓库并上传

    echo "# sss" >> README.md
    git init
    git add README.md
    git commit -m "first commit"
    git remote add origin https://github.com/zsweet/xxx.git
    git push -u origin master

    添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    从现在起,只要本地作了提交,就可以通过命令:

    $ git push origin master
    //或者直接 git push

    5.2 直接上传已经存在的仓库

    git remote add origin https://github.com/zsweet/xxx.git
    git push -u origin master

    5.3 git clone

    克隆远程git到本地,两种方式都可以:我常用第二个

    $ git clone git@github.com:michaelliao/gitskills.git
    $ git clone https://github.com/michaelliao/gitskills.git
  • 相关阅读:
    17373194陈丛文第一次项目作业
    软工第一次博客作业
    软工热身作业
    OO第4次博客作业
    OO第三次博客作业
    oo第二次总结作业
    OO第一次总结作业
    UML系列——OO Unit4分析和学期总结
    JML规格编程系列——OO Unit3分析和总结
    电梯系列——OO Unit2分析和总结
  • 原文地址:https://www.cnblogs.com/zswbky/p/8454066.html
Copyright © 2011-2022 走看看