zoukankan      html  css  js  c++  java
  • git 学习

    Git的下载和安装

      我们都知道使用一个软件之前,我们需要下载和安装。Git是可以兼容多个平台的,如:Windows、Mac、Linux、Solaris。在这里,我们针对Windows下的Git来学习。 
      下载链接:官网下载百度云下载 
      安装说明:双击exe文件,一直下一步即可。安装完成后,会在开始菜单里出现如下图的三个图标。 

    这里写图片描述

    Git基本配置

      安装完成后,我们需要进行两项配置,一项是配置自己的名字,一项配置自己的邮箱地址,配置的目的是为了可以方便查看是谁修改的代码,以做确定身份之用。在桌面任意处右击–Git Bash Here,在弹出的Git Bash命令框中输入下面的命令:

    $ git config --global user.name “Your name” //配置用户名
    $ git config --global user.email “Your Email address”  //配置用户邮箱地址
    

      

    例如:

    $ git config --global user.name “Micheal”
    $ git config --global user.email “15732625435@163.com”
    

      

    查看当前配置命令:

    $ git config user.name   //查看用户名
    $ git config user.email  //查看用户邮箱地址
    $ git config -l          //查看所有配置
    

      

    整体图示 

    这里写图片描述


    ok,配置算是完成了。

    Git简单使用

      通常,我们一个项目所有代码是放在一个文件夹下的。不过,为了展示方便,我就用一个txt文件来代替这个系统代码文件夹,通过对txt文件的管理来映射对代码的管理,效果是一样的。所以说,以下操作你完全可以拿你的一个项目来做实验。

    • 在桌面新建一个文件夹,命名为GitTest。
    • 在GitTest文件夹下新建一个文本文件,命名为readme.txt。(这相当于你把代码文件夹放到GitTest根目录下)
    • 在GitTest文件夹下右击,选择Git Bash Here,输入命令:git init 。这时候,GitTest文件夹下会出现一个.git文件夹,它是隐藏的,需要把文件夹选项设置为显示隐藏文件夹方可看到。这个时候,GitTest文件夹下就是一个版本库了。就相当于我们new了一个管理员,不过这个管理员现在还不知道要管理什么内容,我们需要告诉他。 
      这里写图片描述
    • 在GitTest文件夹下右击,选择Git Bash Here,输入命令:git add . (这个点代表所有文件,你也可以写成具体的文件名,如readme.txt)。这行命令的意思是告诉仓库管理员,你把这个文件夹下的所有文件都添加到仓库了,让他帮你把这些文件管理起来。
    • 然后在命令行中输入命令:git commit -m “add files” ,这行命令的意思是告诉管理员一些备注信息。引号里面必须写一些内容,写什么随你。 
      这里写图片描述
    • OK,执行完上面这些步骤,我们的readme.txt文件就被管理起来了,现在我们开始演示。比如,我在readme.txt文件夹下添加一行信息:I love git. 保存。查看谁被修改了,使用命令:git status 。查看修改了什么,使用命令:git diff 文件名。如图所示,修改了文件readme.txt,在其中添加了一行信息 I love git. 

      这里写图片描述
    • 现在我们再执行一次git add . 和git commit -m “add one sentence”。如下图所示,这是什么意思呢?我们小时候玩游戏的时候,都有状态存盘的功能,如果某一关没有过去,你还可以选择读取前一关的状态,从那里重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以保存一个“快照”,这个快照在Git 中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作。现在,我们就把readme.txt这个文件保存了一个快照。 

      这里写图片描述
    • 为了你更好的理解呢?我们再重复一遍上面的操作。我再在readme.txt文件夹下添加一行信息:Git is the best VCS. 然后执行git add . 和 git commit -m “add the other sentence”。这样,我们就又一次存了一个快照。 

      这里写图片描述
    • 好了,就像打游戏一样,提前存了快照,即使打输了游戏,也还是可以返回到保存的进度。类比代码,我们改乱了代码,希望回到之前的状态。我们就可以执行命令:git log 来查看我们存了哪些快照。 
      这里写图片描述
    • 我们现在就可以看到了我们存了三次快照,第一次是将代码添加到版本库进行管理,算是初始进度。第二次是添加一行句子:I love git.的快照。第三次是添加一行句子:Git is the best VCS. 的快照。commit后面跟着的一串字母和数字的组合是系统生成的不会重复的SHA1计算出来的数字,是这次快照的惟一ID属性。当我们需要回到指定的快照的时候,就需要输入其ID来进行返回。
    • 下面我们回到只有第一个句子的快照,输入命令:git reset –hard 805c6c ,这句命令中的805c6c其实就是指的第二次快照的ID,不过这ID没必要写全,写前几位就可以了,Git会自动去找。OK,执行完这行命令,你再看看readme.txt文件中是不是只有一行信息了。 
      这里写图片描述

    小结

    现在总结一下: 
    - 新建一个版本管理仓库:git init 
    - 向仓库中添加一个文件:git add filename 
    - 保存快照:git commit -m “top information” 
    - 查看快照:git log 
    - 返回到指定快照:git reset –hard commit id 
    注意:commit 之前一定要先add ,因为它保存的快照是add的东西。这就涉及到Git优于SVN的一点,Git保存的是修改,而SVN保存的是文件,所以Git在速度上优于SVN。如果你不理解,我举个例子:对于一个txt文件,如果我们在里面添加了一行信息,Git只保存添加的这一行信息。而SVN则保存的是加上这两行信息后的所有项目文件。这个只保存修改的机制是Git的一大亮点。 

    Git命令

    (基本单词:workspace,工作区;Index/Stage,暂存区;Repository,仓库;Remote,远程仓库;global,整体的) 
    在当前目录下新建一个Git代码库:$ git init

    新建一个目录,将其初始化为Git代码库:$ git init [project-name]

    下载一个项目和它的整个代码历史,-o给远程仓库起名:faker,默认origin:$ git clone [-o faker] [url]

    用户基本配置 
    Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。 
    显示当前的Git配置:$ git config -l (或--list) 
    编辑Git配置文件:$ git config -e [--global] 
    设置提交代码时的用户信息:

    $ git config [--global] user.name "[name]"
    $ git config [--global] user.email "[email address]"
    

      

    增加/删除文件

    $ git add [file1] [file2]...  //添加指定文件到暂存区
    $ git add [dir]  //添加指定目录到暂存区,包括子目录
    $ git add .    //添加当前目录的所有文件到暂存区
    $ git add -p  //对于同一个文件的多出变化,可以实现分次提交
    

      

    $ git rm [file1][file2] .... //删除工作区文件,并且将这次删除放入暂存区
    $ git rm --cached [file] //停止追踪指定文件,但该文件会保留在工作区
    $ git mv [file-original] [file-renamed] //改名文件,并且将这个改名放入暂存区
    

      

    代码提交

    $ git commit -m "zhushixinxi" //提交代码到仓库区
    $ git commit [file1] [file2] .. -m "zhushixinxi"  //提交暂存区的指定文件到仓库区
    $ git commit -a //提交工作区自上次commit之后的变化,直接到仓库区
    $ git commit -v //提交时显示所有的diff信息
    $ git commit --amend -m "zhushixinxi" //使用一次新的commit,替代上一次提交,如果代码没有变化,则用来改写上一次commit的提交信息
    $ git commit --amend [file1] [file2] ... //重做上一次commit,并包括指定文件的新变化
    $ git log --pretty=oneline --abbrev-commit //查看提交历史
    

      

    分支

    $ git branch //列出所有本地分支
    $ git branch -r //列出所有远程分支
    $ git branch -a //列出所有本地分支和远程分支
    $ git branch -v //列出所有本地分支,并展示所有分支最后一次提交的信息
    $ git branch -vv //列出所有本地分支,展示最后一次提交信息和远程分支的追踪情况
    $ git branch [branch-name] //新建一个分支,但依然留在当前分支
    $ git checkout [branch-name]  //切换到指定的分支,并更新工作区
    $ git checkout -b [branch-name] //新建一个分支,并切换到该分支
    $ git checkout --track [branch-name] //新建一个与远程分支同名的分支,并切换到该分支
    $ git branch [branch-name] [commit]  //新建一个分支,指向指定commit
    $ git branch --track [branck-name] [remote-branch] //新建一个分支,与指定的远程分支建立追踪关系
    $ git checkout -  //切换到上一个分支
    $ git branch --set-upstream-to [branch-name] [remote-branch] //在现有分支上建立与远程分支的追踪关系
    $ git merge [branch-name] //合并指定分支到当前分支
    $ git cherry-pick [commit] //选择一个commit,合并进当前分支
    $ git branch -d [branch-name] //删除分支
    $ git push origin [branch-name] //新增远程分支,远程分支需先在本地创建,再进行推送
    $ git push origin --delete [branch-name] 
    $ git branch -dr [remote/branch]  //删除远程分支
    

      

    撤销

    $ git checkout [file] //恢复暂存区的指定文件到工作区
    $ git checkout [commit] [file] //恢复某个commit的指定文件到暂存区和工作区
    $ git checkout . //恢复暂存区的所有文件到工作区
    $ git reset [file] //重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
    $ git reset --hard //重置暂存区与工作区,与上一次commit保持一致
    $ git reset [commit] //重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
    $ git reset --hard [commit] //重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
    $ git reset --keep [commit] //重置当前HAED为指定commit,但保持暂存区和工作区不变
    $ git revert [commit] //新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支
    $ git stash
    $ git stash pop // 暂时将未提交的变化移除,稍后再移入
    

      

    标签管理

    $ git tag v1.0  //保存当前版本为v1.0
    $ git tag       //查看所有标签
    $ git tag v1.2 6224937  //将commit id为6224937打上标签v1.2
    $ git show v1.0 //查看v1.0标签信息
    $ git tag -a v1.5 -m "Version 1.5" 6224937  //创建带有说明的标签
    $ git tag -d v1.0  //删除标签
    $ git push origin v1.0  //推送v1.0标签到远程
    $ git push origin --tags //推送所有本地标签到远程
    //删除远程标签,首先从本地删除,再出远程删除
    $ git tag -d v1.0 //本地删除
    $ git push origin:refs/tags/v1.0 //从远程删除标签
    

      

  • 相关阅读:
    MYSQL: 什么是MYSQLD Service
    100 logging模块
    099 hashlib和hmac模块
    098 json和pickle模块
    097 sys模块
    096 os模块
    095 random模块
    094 datetime模块
    093 time模块
    092 模块基础实战之ATM和购物车系统分文件处理
  • 原文地址:https://www.cnblogs.com/saryli/p/8328053.html
Copyright © 2011-2022 走看看