git的基本使用

转载请标明出处 http://www.jianshu.com/p/680757564abe 本文出自:【wzhwcp的博客】

git

1.git基本概念

1.1基本概述

git 采用的是分布式仓库,本地和远程仓库都是一个包含完整记录的仓库,如果某一处被格式化了,还以从另一个仓库获取,并不会有大影响(只要之前进行了同步仓库)。git 可以在断网的情况下,提交到本地仓库,之后联网再推到远程仓库。每次提交或者保存,git都会记录下所有文件状态,若未改变的文件,git不会再次存储,只会链接到之前已经存储的文件。

1.2状态

git文件一共有四种状态:

  • Untracked 新建的文件,git仓库中没跟踪的

以下为git中存在的,并在跟踪的

  • Unmodified 和仓库文件对比没修改过的
  • Modified 修过的
  • Staged 提交之前的状态(执行commit之后,会将处在这个状态下的文件,commit到版本库中)
lifecycle

2.忽略文件

创建本地.gitignore

  • touch .gitignore 不commit在本地用,也可以commit到仓库和别人一起分享

创建一个global .gitignore

  • git config --global core.excludesfile ~/.gitignore_global 每个Git repository项目都可以用这个rules
  • 这里可以看到相关规则a Gist containing some good rules

指定仓库排除

  • 不用创建.gitignore 只用在本地生成的文件.git/info/exclude中添加规则,这里添加的规则并不会被checked in,并且也只对本地repository生效

参考Ignoring files

3.比较不同

  • git diff

    • Modified 状态的文件与State状态的文件compares
  • git diff -stated (stated换成cached,它两是同义词)

    • State状态下的文件与last commit状态compares

4.提交文件

  • git commit

    • 弹出默认的或者你配置的编辑器进行提交信息编辑
  • git commit -m flag

    • 这种是比较简便的方式,eg:

    git commit -m "Story 182: Fix benchmarks for speed"

  • git commit -a

    • 如果有很多处于Modify状态的文件,一个个add到state状态太麻烦,可以直接加-a,自动加到state,并全部提交

这里遇到一个问题:当我不修改系统默认的提交信息时(或者只是换行不输入任何信息),然后关掉编辑器会出现提交不成功,并会提示
Aborting commit due to empty commit message.

解决方法:必须输入新的提交信息,即在原来的基础上,至少要加入新的行数据。

5.移除文件

  • git rm
    • 移除文件,git不再对其跟踪,并从磁盘删除
  • git rm --cached file
    • 从git中删除,但保留在本地磁盘
  • git rm log/*.log
    • 删除log/目录下以.log结尾的文件,即后面可以加一些表达式eg:

git rm \*~ 删除所有以~这个结尾的文件

6.移动文件

  • git mv file_from file_to
    • 将文件重新命名,并处于state状态

7.参看提交历史

  • git log 显示检验码、作者、日期、提交信息
  • git log -p -2 显示每个提交修改的补丁 限定两个
  • git log --stat 显示多少文件修改,增加或减少多少行
  • git log --pretty=oneline(short、full、fulller) 输出更粗略的的信息
  • git log --pretty=format:"%h - %an, %ar : %s" 精简格式化输出,更多参数详见:Table 1. Useful options for git log --pretty=format
  • git log --pretty=format:"%h %s" --graph (graph以图表显示详细的branch和merge历史)更多的选项命令详见:Table 2. Common options to git log

限定输出

  • git log --since=2.weeks 最后两周提交
  • git log -Sfunction_name 最后一次匹配的增加或移除提交

更多限定
Table 3. Options to limit the output of git log

8.撤销相关:

参考至:Git Basics - Undoing Things

  • git commit --amend
    • 当执行了commit之后,commit信息不完整、或者有文件还处在Modified 状态,需要在上一个commit下提交,那么就需要执行次命令,然后将文件add到state area,最后再提交,此提交会覆盖上一次提交

`eg

$ git commit -m 'initial commit'

$ git add forgotten_file

$ git commit --amend`

  • git reset HEAD README.md
    • 将处于state area 的文件移除撑modified文件
  • git checkout --README.md
    • 将处于Modified的文件恢复成到上一次commit状态 (注意:这是修改的内容将会被删除,更好的方法是用Git Branching)

9.与远程仓库对接

展示仓库名

  • git remote (- v 列出URLS)

    • 列出你指定的远程仓库名,如果当前仓库是cloned下来的,至少可以看到origin,我们可以用这些名字,很方便的进行pull和push
  • git remote add

    • 添加一个以shortname为引用的远程仓库

fetch、pull、push

  • git fetch[remote-name]

    • 获取你本地没有的数据,并且不会与你编辑过的文件合并,只能手动进行合并;还可以获取所有的分支引用,进行合并和检查。
  • git pull

    • 如果目前分支有建立起远程仓库追踪(如:gitclone url),那么pull则会获取数据并自动和编辑过的文件进行合并。
  • git push [remote-name] [branch-name]

    eg git push origin master

(==注==:origin 是用git clone到本地之后,自动命名,如果在你push之前,有人先push了,那么push会失败,必须fetch下来合并,并且运行起来,才能在push)

  • git remote show [remote-name]
    • 检查远程仓库、将会展示追踪的分支消息、同时也会提示,当本地运行git pull和git push会进行啥操作
  • git remote rename pb paul
    • 重命名
  • git remote remove [remote-name]
    • 移除镜像

10.Tagging

  • git tag 列出所有标记列表
  • git tag -l "v1.8.5*" 列出指定匹配模式的标记

10.1 轻量(lightweight)标记

指定一个提交(commit)点作为tag,并不保存额外的信息、

  • git tag v1.4-lw
  • git show v1.4-lw 并不展示额外的信息

10.2 注解(Annotated)标记

包含tagger 名字、邮箱、日期、tagging msg等信息

  • git tag -a v1.4 -m "my version 1.4"

-m 指定标记消息,若没有,系统会自动采用默认的编辑器

给之前提交(commit)加上tag

  • git log --pretty=oneline 看之前的提交历史
  • git tag -a v1.2 9fceb02 根据提交的校验和添加tag

分享tags
默认情况下,git push 并不会将本地的tag,push到远程服务器上,用以下两个命令行推到远程仓库上

  • git push origin v1.5 指定一个tag到远程仓库上
  • git push origin --tags 将所有的tag推到远程仓库

检出Tags
必须新建一个分支,然后将要检出的tags,指定到这新分支上

  • git checkout -b [branchname] [tagname]
  • git checkout -b version2 v2.0.0

11.别名(Aliases)

为了是命令更简单、更容易明白和操作,可以给命令添加别名如下:

  • git config --global alias.co checkout
  • git config --global alias.br branch
  • git config --global alias.ci commit
  • git config --global alias.st status

运行的时候直接打 git ci可以

可视化命令 gitk

你可能感兴趣的:(git的基本使用)