zoukankan      html  css  js  c++  java
  • Git学习笔记

    这是之前学Git记下的笔记,以前傻乎乎的用命令行,现在发现用小乌龟更方便。

    转载注明出处哦:http://www.cnblogs.com/stonehat/

    1    基本概念

    Stage:暂存区,缓存区

    Repository:仓库(本地仓库).git目录

    Remote:远程仓库

    Track: 将一个新文件加入到git

    Unstage:取消放入暂存区

    Git存储原理:

    Git doesn’t store data as a series of changesets or differences, but instead as a series of snapshots。Git 保存的不是文件差异或者变化量,而只是一系列文件快照。

    快照管理:(微型文件系统,文件指纹验证是否变化,不便的直接链接)

     

    三种区域:

     

    所有数据存放在本地.git目录,可以直接拷贝。

    2              基本操作

    2.1             仓库创建

    Git init

    2.2             仓库复制

    Git clone  url

    只会复制master下来

    Git clone  url dir

    指定文件夹

    git clone https://github.com/libgit2/libgit2 mylibgit

    2.3             文件管理

    2.3.1        添加文件到暂存区

    Git add *

    Git add file

    Git add dir       

    2.3.2        删除文件到暂存区

    Git rm

    2.3.3        修改文件名(移动)到暂存区

    Git mv [file-orgin]  [file-rename]

    2.3.4        提交暂存区到仓库

    Git commit –m “注释”

     

    2.3.5        撤销修改文件

    修改的文件可以在git status观察到

    如果撤销修改,

    可以采用git checkout -- file的方式撤销

    撤销所有

    git checkout  -- *

    2.3.6        撤销暂存区数据

     

     

    2.4             分支管理

    查看分支:git branch

    创建分支:git branch <name>

    切换分支:git checkout <name>

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

    合并某分支到当前分支:git merge <name>

             默认使用fast-forward模式

             可以禁用,合并时会生成一个新的commit

             git merge --no-ff -m "merge " dev

            

    删除分支:git branch -d <name>

     

    远程分支下载:git checkout -b <本地分支名> origin/<远程分支名>

                  

     合并冲突:

     当merge出现冲突的时候,git会提醒

    需要手动修改后进行提交

    Git add

    Git commit

    2.5             版本管理

    每个提交都是一个版本,git提供了一些方便的命令供我们使用。

    2.5.1        查看日志

    Git log

             当前分支的commit历史

                       有用的配置

    log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

    Git reflog

             显示引用变化历史,相当于head变化

    2.5.2        版本回退:

    一个git reset --hard HEAD^

    俩git reset --hard HEAD^^

    多个git reset --hard HEAD~数字

    回退到指定版本

    git reset --hard commit_id

    commitid可以从reflog或者log中查看

    --hard表示丢弃暂存区的东西

    --soft – 暂存区和工作目录都不会被改变,改变都放在暂存区

    --mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响,改变不会放在暂存区。

    --hard – 缓存区和工作目录都同步到你指定的提交

    Git revert

    reset是指将当前head的内容重置,不会留任何痕迹。

    revert是撤销某一次提交,但是这次撤销也会作为一次提交进行保存

    假设当前有3个commit,git log如下:

    commit3:  add test3.c 

    commit2:  add test2.c 

    commit1:  add test1.c 

    执行 git revert HEAD~1之后,会提示提交信息,提交后git  log如下:

    commit4:  Reverts “test2.c” 

    commit3:  test3.c 

    commit2:  test2.c 

    commit1:  test1.c 

    执行完后,test2.c被删除了,运行git status,无任何变化。

    执行 git reset HEAD~1之后,再次看git log,如下:

    commit2:  test2.c 

    commit1:  test1.c 

    执行完后,commit3被删除了;但是test3.c还在本地缓存区,运行git  status,可以看见提示test3.c可以用git add包含该文件。

    若执行git reset --soft HEAD~1,log为:

    commit2:  test2.c 

    commit1:  test1.c 

    执行完后,test3.c也被删除了,查看git  status,提示可以commit以提交test3.c,test3.c在暂存区。

    若执行git reset --hard HEAD~1,log为:

    commit2:  test2.c 

    commit1:  test1.c 

    执行完后,test3.c也被删除了,查看git  status,无任何变化。

    2.6             标签管理

                               

    2.6.1        打标签

    相当于给某个提交取一个好记住的名字,例如v1.0.0

    git tag v1.0.0 [commitid]

    2.6.2        显示所有标签

    git tag

    2.6.3        显示标签信息

    Git show tagname

    2.6.4        标签管理

    命令git push origin <tagname>可以推送一个本地标签;

    命令git push origin --tags可以推送全部未推送过的本地标签;

    命令git tag -d <tagname>可以删除一个本地标签;

    命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

    2.7             远程管理

    一般都要和两部分人提供

    2.7.1        git clone

    从远程主机克隆一个版本库

    git clone <版本库的网址> <本地目录名>

     

    2.7.2        git remote

    为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

    列出所有主机:git remote

    带网址列出主机:git remote –v

    clone版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

    git clone -o jQuery https://github.com/jquery/jquery.git

    git remote show命令加上主机名,可以查看该主机的详细信息。

     git remote show <主机名>

    git remote add命令用于添加远程主机。

     git remote add <主机名> <网址>

    git remote rm命令用于删除远程主机。

     git remote rm <主机名>

    git remote rename命令用于远程主机的改名。

     git remote rename <原主机名> <新主机名>

    2.7.3        git fetch

    将某个远程主机的更新,全部取回本地。

    如果只想取回特定分支的更新,可以指定分支名。

    git fetch <远程主机名> <分支名>

    所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的master,就要用origin/master读取。

    git branch  –r,可以用来查看远程分支,

    -a选项查看所有分支。

     可以采用git checkout <远程主机名>/ <分支名>切换到该分支

    但是一般用

    git checkout -b newBrach <远程主机名>/ <分支名> ,意思是在<远程主机名>/ <分支名>的基础上,创建一个新分支。

    也可以使用merge,合并远程分支。

    2.7.4        git pull

    取回远程主机某个分支的更新,再与本地的指定分支合并。

    git pull <远程主机名> <远程分支名>:<本地分支名>

    等同于先做git fetch,再做git merge

    2.7.5        git push

    命令用于将本地分支的更新,推送到远程主机。

    git push <远程主机名>  <本地分支名>:<远程分支名>

    省略远程分支名,表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

    省略本地分支名,则表示删除指定的远程分支

    如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

    如果本地版本低,那么会报错,可以--force强制push,--tags表示也推送tags.

    git push --force origin

    2.7.6        将本地库推到远程端

    git push origin master

    2.8             自定义Git

    2.8.1        自定义命令

    可以利用git config命令来给命令取别名。

    例如

    git config --global alias.co csheckout

    git config --global alias.ci commit

    git config --global alias.br branch

    git config --global alias.unstage 'reset HEAD'

    其中,global表示针对当前用户所有仓库都起作用。如果不加,表示只对当前仓库有用,每个仓库的Git配置文件都放在.git/config文件中:

     

    当前用户的config存放在用户主目录下的一个隐藏文件.gitconfig中:

     

    2.8.2        忽略文件

    为了防止没用的文件被提醒untracked,可以在git仓库主目录下添加.gitignore文件(本身要放到版本库里面),该文件可以配置git要忽略哪些文件,不添加到仓库中。

     

     

     

    如果发现不能添加文件,可以采用

    git check-ignore -v file检查被哪个规则忽略了。

                  

    作弊码

  • 相关阅读:
    Memcache 内存分配策略和性能(使用)状态检查
    C# 中字符串转换成日期
    Task及Mvc的异步控制器 使用探索
    MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
    从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单
    从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十一║Vue实战:开发环境搭建【详细版】
    vue-router 快速入门
    Vue.js——60分钟快速入门
    五小步让VS Code支持AngularJS智能提示
    AngularJS----服务,表单,模块
  • 原文地址:https://www.cnblogs.com/stonehat/p/5947206.html
Copyright © 2011-2022 走看看