Git是比较优秀的分布式版本管理工具,这次学习了git的基本命令,现在作一些归纳总结,已备复习之用。

Git 认识  

  • Git 直接用hash值记录提交的修改文件的快照,本地操作无需联网
  • Git 有三种状态,你的文件可能处于其中之一:    

  1.已修改(modified)   —— 表示修改了文件,但还没保存到数据库中。

  2.已暂存(staged)     —— 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

  3.已提交(committed)—— 表示数据已经安全的保存在本地数据库中。  

  • 基本的 Git 工作流程如下:  

  1.在工作目录中修改文件。                     --工作目录

  2.暂存文件,将文件的快照放入暂存区域。                 --暂存区域

  3.提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。  --Git仓库

Git 配置

  • Git 自带git config 的工具来设置控制 Git 外观和行为的配置变量,这些变量存在三个位置,相应参数会从相应的文件读写配置,每一级别覆盖上一级的配置,如.git目录的config覆盖上一级,具有最高优先级。

  1./etc/gitconfig 文件, --system参数,如: git config --system xx

  2.~/.gitconfig~/.config/git/config 文件,--global参数,

  3.当前仓库.Git 目录中的 config 文件, 不加参数

  • 配置用户信息,设置用户名称与邮件地址
  • 配置默认文本编辑器,未配置会使用系统默认文本编辑器,通常是vim
$ git config --global user.name "test"
$ git config --global user.email test@example.com
$ git config --global core.editor emacs
$ git config --global core.editor "'C:/Program Files/Sublime Text/sublime_text.exe' -w" ## windows下配置编辑器sublime()
$ git config --list                                          ## 检查配置信息
$ git config username                                        ## 检查git某一项配置
  • 有三种方法可以查找Git 命令的使用手册
git help <verb>      ##如 git help config
git <verb> --help
man git-<verb>

Git 基础

  •  获取Git仓库有两种方式:
  1. 对已有的工作目录管理,初始化仓库
cd test             #进入要初始化的目录test
git init     #初始化,test目录下生成.git文件夹
git add test.txt    #跟踪test.txt文件,或者使用*通配符跟踪目录下所有文件
git commit -m 'test'  #提交快照,说明

  2. 在指定目录下克隆远程仓库

git clone https://github.com/github/test_git.git        #在当前目录下初始化.git文件夹,并新建test_git文件夹,拷贝远程仓库内容在test_git文件夹下
git clone https://github.com/github/test_git.git mould    #同上,不过本地仓库名称改为mould 
  • Git仓库初始化后,你的工作目录下的每个文件不外乎两种状态:
  1. 已跟踪 —— 是指那些已被纳入版本控制的文件,存在于上一次提交的快照的记录中,它们的状态可能处于未修改,已修改或者已放入暂存区。克隆某个仓库的工作目录下的文件都属于此类,并处于未修改状态;
  2. 未跟踪 —— 工作目录除了已跟踪以外的文件,它们不存在于上一次提交的快照记录中,也没被放入暂存区
  • 检查当前文件状态   git status
xxxx ~/documents/git/test (master)          ##括号里的master显示当前所处的分支
$ git status         ## 检查目录下文件的状态
 On branch master          ## 所处分支 master
Initial commit
nothing to commit (create/copy files and use "git add" to track) ## 没有需要提交的,也没有未被跟踪的文件

  新建文件test.txt后,再次检查状态

$ git status
On branch master
Initial commit
Untracked files:                               ## 未跟踪的文件--test.txt,Git不会主动添加跟踪
(use "git add <file>..." to include in what will be committed)   ## 提示用git add 跟踪
test.txt
nothing added to commit but untracked files present (use "git add" to track)

  跟踪新文件  git add test.txt  后,再次查看状态

$ git add test.txt                          
warning: LF will be replaced by CRLF in test.txt.           ## 正常情况不会有之下的提示,
The file will have its original line endings in your working directory. ## 用vim新建的文件test.txt,linux和windows的换行符不同,具体可以搜下
$ git status
On branch master
Initial commit
Changes to be committed:                             ## 修改将被提交,已处于暂存状态
(use "git rm --cached <file>..." to unstage)
new file: test.txt                           ##test.txt已被跟踪

   再次修改test.txt文件,git  status查看状态之后

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: test.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: test.txt

  test.txt同时出现在暂存区和非暂存区,现在提交的会提交上一次git add的那个版本的修改,而不是提交此时文件的内容,就验证了git暂存区的存在

  • 状态简栏:git status -s或者git status --short
$ git status -s
M edit.txt        # M-修改了没放入暂存区
A new.txt         # A-修改了放入暂存区
MM test.txt        # 左边M表示修改了已放入暂存区颜色为绿色,右边M表示修改了没放入暂存区颜色为红色,与上边的M相同
?? out.txt         # ??表示没有被跟踪
  • 配置忽略文件--.gitignore,告诉git仓库不需要跟踪的文件,在工作目录下新建.gitignore文件

  GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在 https://github.com/github/gitignore

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
  • 查看已暂存和未暂存的修改 git diff
git diff                   ## 不加参数,比较的是工作目录中当前文件和暂存区域快照之间的差异,就是修改之后还没有暂存起来的变化内容
git diff --cached            ## (git 1.61或更高版本允许使用git --staged) 查看已经暂存起来的变化
  • 提交更新 git commit
git commit -m 'commit str'        ## 加上提交信息,方便查看每次提交,提交后的信息有哪个分支,和SHA-1校验
git commit -a -m 'commit tracked' ## 加上 -a 参数,Git会自动把所有已跟踪过的文件暂存起来一并提交,没跟踪的文件不会被操作
  • 移除文件  git rm
rm text.txt                  ## 简单的从工作目录删除文件,但没有移除跟踪记录,git status会提示 changes no staged for commit,
git rm text.txt        ## 从跟踪文件清单中移除,并连带从工作目录删除
git rm -f text.txt           ## 如果文件删除之前已被跟踪,并且修改了,则需要用强制删除 -f,这样是防止误删,不能恢复
git rm --cached log/\*.log        ## 从git仓库中移除,亦从暂存区中移除,但还在工作目录,不跟踪,当把不需要跟踪的日志文件等add暂存区时,此方法很有用
  • 重命名  git mv
git mv text.txt rename.txt        ## 重命名操作
  • 查看提交历史 git log     会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明
git log -p -2                 ##  -p显示每次提交的内容差异, -2 仅显示最近两次提交
git log --stat             ## 显示每次提交的简略的统计信息
git log --pretty=oneline         ## --pretty 使用其他格式显示历史提交信息,oneline,short,full,fuller 和 format(后跟指定格式)
git log --pretty=format:"%h %s" --graph ## --graph 显示 ASCII 图形表示的分支合并历史
git log --since=2.weeks        ## 指定时间之前的提交

撤销操作

  •  撤销操作  git commit --amend   
git commit -m "bug"          ## 提交完成后发现某个文件没添加,或提交信息写错
git add bug.txt             ## 添加需要提交的文件
git commit --amend           ## 参数--amend会重新提交,第二次提交覆盖第一次提交的结果,最终只有一次提交
  • 取消暂存的文件   git reset HEAD [file]
git add *                 ## 暂存了所有文件
git reset HEAD test.txt        ## 取消暂存的test.txt文件

  注:调用时加上--hard选项可能会导致工作目录中所有当前进度丢失

  • 撤销对文件的修改  git checkout -- [file]

  注:这个命令会撤销你对此文件所有的修改,还原成上一次提交的样子,慎用,除非你真的想撤销,可以用Git 分支来处理,记住Git里提交的东西几乎都是可以恢复的

Git 远程仓库的使用

  • 查看远程仓库 git remote
git remote            ## 列出你指定的每一个远程服务器的简写,如果你克隆了自己的仓库,至少能看到origin,这是Git给你克隆的仓库默认的名字
git remote -v         ## 选项-v,会显示远程仓库的简写与其对应的URL
  • 添加远程仓库 git remote add <shortname> <url>
git remote add mygit https://github.com/xxx/xxx.git    ##为远程仓库添加简写mygit
  • 从远程仓库中抓取与拉取
git fetch [remote-name]         ## 会从最初克隆的服务器上拉取到本地仓库,并不会自动合并或修改你当前的工作
git pull [remotej-name]         ## 会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支
  • 推送到远程仓库  git push [remote-name] [branch-name]
git push origin master          ## 会将master分支推送到origin服务器(clone时自动设置好的两个名字) 
  • 查看远程仓库  git remote show [remote-name]
git remote show origin          ## 会列出远程仓库的URL和跟踪分支的信息
  • 远程仓库的重命名与移除
git remote rename mygit newgit     ## 把简写名mygit重命名为newgit
git remote rm newgit          ## 移除远程仓库newgit

打标签 

  Git标签是给某一次特定的提交标识以示重要,如发布节点v1.0,使用两种类型的标签:

    1.轻量标签  --  只是一个特定提交的引用

    2.附注标签  --  存储在Git数据库中的完整对象,可以被校验。包括打标签者的名字,电邮,日期,和标签信息

  • 轻量标签 git tag
git tag v1.0              ## 只需要提供标签的名字
git show v1.0             ## 轻量标签只会显示提交信息
  • 附注标签 git tag -a -m
git tag -a v1.1 -m 'first tag'   ## 选项-m 指定一条将会存储在标签中的信息,如果没有为附注标签指定一条信息,Git会运行编辑器要求你输入信息
git show v1.1             ## 附注标签会显示标签信息和提交信息
  • 列出标签 git tag
git tag                 ## 这个命令以字母顺序列出所有标签
git tag -l 'v1.8.5*'        ## 只列出1.8.5系列
  • 后期打标签
git log --pretty=oneline      ## 列出提交的历史记录
git tag -a v1.2 9fceb02      ## 为校验和为9fceb02的提交打标签
  • 共享标签 git push origin [tagname]
git push origin v1.0        ## 默认情况下,git push 不会推送标签到远程仓库,需要你显式的推送标签
git push origin --tag       ## 选项--tag把所有不在远程仓库的标签全推送到远程仓库
  • 检出标签 git checkout -b [branchname] [tagname]
git checkout -b version2 2.0   ## Git并不能真的检出标签,想要工作目录与远程仓库中的特定标签完全一致,就可以在特定的标签上创建新的分支

Git 别名 -- 设置一个别名可以更快的输入

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 config --global alias.unstage 'reset HEAD --'   ## 取消暂存
git config --global alias.last 'log -1 HEAD'      ## 最后一次提交
git config --global alias.visual '!gitk'         ## 用Git协作工具执行外部命令,要在命令前加上'!'

Git基础部分,常用的总结完毕,下次将总结Git 杀手锏——分支branch

参考资料:1.Git官网教程,官网写的比较详细,推荐看,

       2.廖雪峰的Git教程简明,主要写了一些常用的命令。

git学习笔记之一的更多相关文章

  1. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  2. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  3. Git学习笔记(四)

    一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...

  4. git 学习笔记6--remote & log

    git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...

  5. Git学习笔记---协作的一般流程

    一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...

  6. 【转帖】Git学习笔记 记录一下

    本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅. 原帖地址 https://wangfanggang.com/Git/git/ 常用命令 仓库初始化 - git init 1 git i ...

  7. [转]Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  8. GIT学习笔记(1):创建版本库

    GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...

  9. GIT学习笔记(5):变基

    GIT学习笔记(5):变基rebase 变基 引入变基 在Git中整合来自不同分支的修改主要有两种方法:merge以及rebase. 整合分支最容易的方法是merge,他会把两个分支的最新快照以及两者 ...

  10. GIT学习笔记(4):远程分支

    GIT学习笔记(4):远程分支 远程分支 远程分支是什么 远程分支是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在GIT进行网络交互时才会更新.远程分支就是书签,提醒着你上次连接远程仓 ...

随机推荐

  1. 将node.js程序作为服务,并在windows下开机自动启动(使用forever)

    手上项目中有一块服务是用node.js实现的,运行环境是windows server 2008 R2,刚开始着手实现这块功能的时候时间很紧迫,随便写了个console程序就部署上去了--启动方式就是在 ...

  2. Sublime Text 3常用插件

    操作:按下Ctrl+Shift+P调出命令面板 输入install 调出 Install Package 选项并回车,然后在列表中选中要安装的插件. 常用插件: 1---- Bracket Highl ...

  3. Redis简单几步

    第一步redis安装:1.首先确认下载包为64位的还是32位的2.下载http://code.google.com/p/servicestack/downloads3.解压下载包得到以下文件:cygw ...

  4. 浅谈HTTP中Get与Post的区别[转载]

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...

  5. CF #404 (Div. 2) D. Anton and School - 2 (数论+范德蒙恒等式)

    题意:给你一个由'('和')'组成的字符串,问你有多少个子串,前半部分是由'('组成后半部分由')'组成 思路:枚举这个字符串中的所有'('左括号,它左边的所有'('左括号的个数为num1,它的右边的 ...

  6. yii2-验证规则,rules,判断条件

    yii2模型的验证规则,简单的使用我就不详细说了,想看的可以去看官网教程http://www.yiichina.com/doc/guide/2.0/structure-models#validatio ...

  7. quartus ii中仿真rom时遇到的问题(待完善)

    1.modelsim仿真只支持.hex,并不支持.mif(Memory Initialzation File). 2.在Matlab中生成.mif文件,然后再quartus中打开,转换为hex格式后另 ...

  8. Xcode8.3 添加iOS10.3以下旧版本模拟器

    问题起源 由于手边项目需要适配到iOS7, 但是手边的测试机都被更新到最新版本,所以有些潜在的bug,更不发现不了.最近就是有个用户提出一个bug,而且是致命的,app直接闪退.app闪退,最常见的无 ...

  9. You-Get , A Tiny Downloader,视频下载小工具

    ---恢复内容开始--- You-Get    You-Get is a tiny command-line utility to download media contents (videos, a ...

  10. vscode奇淫记(上)

    每次换editor都是一种煎熬,从最早的eclipse,sublime,webstorm到现在在用的atom,换编辑器的驱动是寻找更酷炫和轻量的平衡点,其实我真的蛮喜欢atom的,酷炫!那我这次打算入 ...