zoukankan      html  css  js  c++  java
  • Git 基本概念及常用命令

    一、基本概念

    1. 文件的三种状态:(任何一个文件在git中都有以下三种状态)
      1) 已提交(committed):表示该文件已经被安全地保存在本地数据库中了。
      2) 已修改(modified):表示修改了某个文件,但还没有提交保存。
      3) 已暂存(staged):表示把已修改的文件放在下次提交时要保存的清单中。
    2. 基本的 Git 工作流程如下:
      1) 在工作目录中修改某些文件。
      2) 对修改后的文件进行快照,然后保存到暂存区域。
      3) 提交更新,将保存在暂存区域的文件快照永久转储到 Git目录(项目中.git目录)中。

    二、常用命令

    1. Git相关配置:

    1)用户信息配置

    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com
    • 每次Git提交都会引用以上两条信息,说明谁提交了更新。
      2)文本编辑器
    $ git config --global core.editor emacs
    • 一般默认是vi/vim,可以通过以上命令自己指定。
      3)差异分析工具
    $ git config --global merge.tool vimdiff
    • Git 可以理解 kdiff3tkdiffmeldxxdiffemergevimdiffgvimdiffecmerge,和 opendiff 等合并工具的输出信息。
      4)查看配置信息
    $ git config --list

    通过该命令查看所有配置信息。
    5)查看某个配置变量

    $ git config user.name

    2. 帮助相关

    $ git help <verb>
    $ git <verb> --help

    3. Git仓库初始化

    1) 新建git本地仓库: 将已有项目添加给git管理。

    $ git init
    $ git commit -m 'initial project version'  

    2) 拷贝远程git仓库: 将远程仓库的全部内容(各个文件的各个版本)拷贝到本地。

    $ git clone url [new dir name]

    4. 记录每次更新到仓库

    1)检查当前文件状态(tracked or not tracked

    #####所有文件都为tracked状态#####
    $ git status
    On branch master
    nothing to commit, working directory clean

    2)跟踪新文件(将untracked变为tracked)或暂存已修改文件

    $ git add filename

    3)忽略某些文件:有些文件不想由git管理,如一些日志文件,可以通过设置.gitignore文件指定哪些文件被忽略。

    $ cat .gitignore
    *.[oa] //忽略.o.a 结尾的文件
    *~ //忽略以~ 结尾的文件

    4)查看未暂存的文件更新了哪些部分

    $ git diff

    5)查看已暂存文件和上次提交时快照之间的差异,查看已经暂存起来的变化

    $ git diff --cached
    $ git diff --staged //较高版本

    6)提交更新

    $ git commit
    $ git commit -v //将修改差异的每一行都包含在更新说明中
    $ git commit -m "comments" //将提交说明加在命令后面
    $ git commit -a //将所有已经跟踪过的文件暂存起来提交

    7)从已跟踪文件清单中移除

    $ git rm filename

    8)文件改名

    $ git mv file_from file_to

    实际上是完成了下面三个命令

    $ mv README.txt README
    $ git rm README.txt
    $ git add README

    9)查看提交历史

    $ git log

    有一些参数可以设置。

    5. 远程仓库相关

    1)添加远程仓库

    $ git remote add [short name] [url]

    以后可使用short name 来指代url作为简称。
    2)从远程仓库抓取数据到本地

    $ git fetch [remote name]
    #不会自动合并(Merge)远端分支和本地仓库,从远程获取最新版本到本地
    
    $ git pull [remote name]
    #从远端分支拉取数据至本地仓库并与本地分支合并。
    
    $ git clone [remote name]
    #自动创建本地master分支用于跟踪远程仓库的master分支

    3)推送数据到远程仓库

    $ git push [remote-name] [branch-name]
    #只有在远程仓库有写权限,并且同一时刻没有其他人在推数据,该操作才能成功。

    4)查看远程仓库信息

    $ git remote show [remote name]

    5)远程仓库的删除和重命名

    $ git remote rename [原名] [新名]
    #重命名远程仓库
    
    $ git remote rm [name]
    #删除远程仓库。远程仓库服务器迁移,原来的克隆镜像不再使用,或者某个参与者不再贡献代码,就需要移除相应的远程仓库

    6)查看提交历史

    git log --pretty=oneline

    6. 分支相关

    理解分支就要理解几个基本概念:Commit对象,暂存内容快照和暂存区域。
    Git中的分支本质上仅是指向commit对象的可变指针。Git会使用matser作为分支的默认名字。
    这里写图片描述
    注:master是分支默认名;中间层是Commit对象,里面存储指向暂存内容快照的指针以及一些commit相关的元信息,同时指向上次的Commit对象;Snapshot是暂存内容快照。
    1)创建新的分支

    $ git branch testing
    #创建了另一个分支名为testing,指向当前分支Commit对象f30ab。

    2)进入某个分支工作

    $ git checkout testing
    #由当前matser分支切换到testing分支。由特别指针HEAD从matser指向testing指明我们切换到了testing分支。
    
    $ git checkout -b iss53
    #创建了分支并切换到iss53分支下工作。
    相当于:
    $ git branch iss53
    $ git checkout iss53

    下图展示了向不同分支方向开发。
    这里写图片描述
    3)分支的合并

    $ git checkout master#进入某个分支
    $ git merge iss53 #将master分支和iss53分支进行合并

    4)关闭分支

    $ git branch -d iss53 #合并之后也就不用iss53这个分支了,即可关闭这个分支。

    5)查看分支情况

    $ git log --oneline --decorate --graph --all

    7. 标签相关

    1)查看标签

    $ git tag

    2)打本地标签

    $ git tag -a "v0.0.1.1"

    3) 将标签推送到远程仓库

    $ git push origin "v0.0.1.1" 
    $ git push origin --tags #把所有不在远程仓库服务器上的标签全部传送到那里

    4)删除本地标签

    $ git tag -d "v0.0.1.1"

    5)删除标签同步到远程仓库

    $ git  push origin :refs/tags/v0.0.1.1

    6)后补标签

    $ git tag -a v1.1 部分校验和(gitlog中码的前7位)

    7)查看具体tag信息

    $ git show v1.1

    8)检出标签

    git checkout -b [branchname] [tagname] 

    参考链接:https://git-scm.com/book/zh/v2

  • 相关阅读:
    jquery插件之jquery.extend和jquery.fn.extend的区别
    block,inline和inline-block的区别
    css 中 div垂直居中的方法
    Native App vs Web App 以及 Hybrid App的实现原理
    小结
    传输层的端口与TCP标志中的URG和PSH位
    常见路由表生成算法与收敛路由
    NAT技术与代理服务器
    CRC校验
    BinarySearchTree-二叉搜索树
  • 原文地址:https://www.cnblogs.com/eva_sj/p/6172247.html
Copyright © 2011-2022 走看看