SVN这类集中式工具记录提交后的修改内容,而GIT在每次修改提交后,记录一个快照。
三种状态:
已提交-commited;已修改-modified;已暂存-staged。
git目录是当前项目的数据仓库,克隆是就是从它里面解压出项目文件。
源码安装
$tar -zxf xxx.tar.gz
$cd xxx
$make prefix=/usr/local all
$sudo make prefix=/usr/local install
git config
Linux下三种级别的配置方式:
/etc/gitconfig 使用git config --system选项时写这个文件; ~/.gitconfig当前用户 使用git config --global;
再就是每个git目录中的.git/config文件。优先级对应也最高。
基础配置:
$git config --global user.name "loujunhui"
$ git config --global user.email xxxx
$ git config --global core.editor emacs //如果希望GIT打开的文本编辑器是emacs
$ git config --global merge.tool vimdiff //差异比较使用vimdiff。Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等
查看配置信息
$ git config --list
$ git config user.name
获取帮助
$ git help <verb>
$ git <verb> help
$ man git-<verb>
例如:git help config
第二章
2.1 建库
方式:clone另外一个库;或者通过命令将当前目录转换为库。
从目录初始化
$ git init
初始当前目录为git需要管理的目录,但是只是初始化,具体哪些文件需要入到库里,而哪些又不需要,是通过 git add命令来添加。git init命令会在当前目录下创建.git目录。
$ git add *.java
$ git add readme.txt
$ git commit -m "initial project"
这样就等到了一个维护目标文件的git库。--想想,库的名称呢,地址呢,怎么共享?
clone
clone命令会把目标库的所有版本记录日志等复制下来。
$ git clone <url>
执行后,会在本地建立一个以 url中xxx.git的xxx命名的目录。并把这个项目的最新版本内容从仓库中复制出来,也就是clone默认是当前最新版本。
$ git clone git://github.com/schacon/grit.git mygrit 指定目录名称
2.2 记录更新内容到仓库
库中的文件分两种:已跟踪 与 未跟踪。已跟踪的又分已修改,也暂存,已提交。而未跟踪的就是除了这些的。通过 clone产生的库,是已跟踪的未修改状态。
文件的状态变化示意图:
检查目录下的文件状态
$ git status
$ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README #
在Changes to be committed下在的都是处于暂存状态
$ git add 命令会添加符合条件的子目录(递归)
暂存已修改文件
修改文件后,执行git status,会显示Changes not staged for commit。并显示哪些文件修改了还没有暂存。
通过$ git add命令将修改的文件添加到暂存区。(git add 命令是多功能命令,它根据目标文件的状态:可以将未跟踪的文件添加为跟踪,也可以将跟踪已修改添加到暂存区,在冲突合并时,将冲突的文件标记为已解决)。
忽略文件
创建文件 .gitignore。比如
*.[oa] *.o或*.a
*~ ~结尾者
忽略文件规则:
- #为注解
- 使用标准的glob模式匹配(所谓的 glob 模式是指 shell 所使用的简化了的正则表达式)
- 匹配模式最后使用/说明忽略的是目录
- 要忽略指定模式以外的任何文件,使用!取反
# 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目录下的所有文件 doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
查看更新(已暂存或未暂存)
$ git diff 未暂存
$ git diff --cached 或者git diff --staged 已暂存
提交更新
提交前最好先git status一下。git commit命令会打开一个编辑输入端用于输入描述。显示的注释不会提交到库中,如果希望将差异做为注释的一部分,使用-v参数。
使用-m参数直接跟注释。
跳过使用暂存区
$ git commit -a 把所有已跟踪的文件提交。
移除文件
$ git rm
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项-f(译注:即 force 的首字母),以防误删除文件后丢失修改的内容。
$ git rm --cached readme.txt
移除跟踪但是不删除文件,后面再把这文件添加到忽略中。
$ git rm log/\*.log 也可以使用glob模式。\表示递归删除。
移动文件
$ git mv file_from file_to
这条命令其它执行下面三个步
$ mv README.txt README
$ git rm README.txt
$ git add README
2.3 查看历史版本
$ git log
$ git log -p -2 -p表示显示差异同,-2表示显示最近两次 --stat显示简要的增改行数。
--pretty用于展示格式设定。如--pretty=oneline将每次提交显示在一行。其它选项有:short ,full, fuller。
format可以定制显示的格式。
$ git log --pretty=format:"%h - %an, %ar : %s" ca82a6d - Scott Chacon, 11 months ago : changed the verison number 085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code a11bef0 - Scott Chacon, 11 months ago : first commit
常用的格式占位符写法及其代表的意义
选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
在使用oneline与format时,结合--graph参数,将会显示每次提交所在的分支及其分化衍合情况。
$ git log --since=2.weeks。时间格式可以为2008-10-03,或者2 years 1 day 3 minutes ago
--author指定作者的提交;--grep根据提交说明搜索;如果多个选项同时指定希望都生效,使用--all-match
2.4 撤消操作
2.4.1修改最后一次提交
$ git commit --amend
使用暂存区里的内容再次提交重写最后一次的提交。
2.4.2 取消已暂存的文件
$ git status命令提示了如何取消那些修改了已暂存的文件。即使用 git reset HEAD <filename>...。
2.4.3 取消对文件的修改
$ git status命令有指引。即通过git checkout -- <filename>...。
注意这样会把修改取消,如果只是希望保留修改。可使用stashing分支来管理,这个后面讲。
2.5 远程仓库
2.5.1 查看当前(项目的)远程库
$ git remote 。使用clone命令创建的库,默认显示origin。自己通过git init创建的则默认为空。
使用git remote -v 查看对应的远程URL,v是verbose-冗长的缩写。
2.5.1 添加远程库
$ git remote add [shortname] [url]。然后就可以通过git fetch shortname来获取远程库内容。
2.5.3 从远程库获取内容
$ git fetch shortname。这个命令会获取所有本地仓库还没有的内容。然后就可以在本地访问对应远程库的所有分支,也可以将指定分支合并到本地。
git fetch origin,会把clone以后所有修改下到本地,但是不会主动合并到工作分支。
git pull将远程分支合并到当前分支。clone命令默认从远程库创建一个master分支用于跟踪远程的master分支。工作中,我们基于master拉分支出来,在需要更新时,切换到master分支,然后执行git pull。然后手工合并master分支与我们的工作分支。
2.5.4 推送数据到远程库
$ git push [remote-name] [branch-name]。clone产生的库,如果不拉任何分支。默认命令应该是
$ git push origin master。origin与master都是clone默认产生的远程库shortname及本地的分支名称。
如果远程库有更新,则推送会失败。
2.5.5 查看远程库信息
$ git remote show [remote-name]
$ git remote show origin * remote origin URL: git@github.com:defunkt/github.git Remote branch merged with 'git pull' while on branch issues#在issues上pull会从远程issues issues Remote branch merged with 'git pull' while on branch master #如果在master git pull会合并 master New remote branches (next fetch will store in remotes/origin) #远程新的分支在本地还没有 caching Stale tracking branches (use 'git remote prune') #已同步的分支在远程已经删除 libwalker walker2 Tracked remote branches #跟踪的远程分支 acl apiv2 dashboard2 issues master postgres Local branch pushed with 'git push' #使用git push命令默认推送的分支 master:master
2.5.6 删除和重命名远程仓库
$ git remote rename origin newname
注意:对远程库名称的修改,对应分支的名称也跟着改。如origin/master将改为newname/master
$ git remote rm remote-name 删除远程库。
2.6 打标签
2.6.1列出已有标签
$ git tag
$ git tag -l 'v1.4.2.*'
2.6.2 新建标签
标签分两种:轻量级lightweight与含附注的annotated。前者是指向特定提交的引用。后者是存储在仓库中的一个独立的对象,自身有校验和信息。包含标签的名字,电子邮件和日期,以及标签说明。
含附注标签
$ git tag -a v1.4 -m "my version 1.4"
查看标签
$ git show v1.4
签署标签
$ git tag -s v1.5 -m "my signed 1.5 tag"
轻量级标签
$ git tag v1.4-1w
验证标签
$ git tag -v [tag-name] (v-verify)
后期加注标签
对前面提交的加注一个标签。
$ git tag -a v1.2 9fceb0 后面跟上对应提交的校验和,或者校验和的前几位。
分享标签
默认推送不包含标签
$ git push origin v1.5
$ git push origin --tags #把所有标签都推送上去。
2.7 技巧
2.7.1 自动命令补全
Linux下:下载Git的源代码,进入contrib/completion目录,把git-completion.bash复制到用户主目录。改名前面加个点。然后在.bashrc中添加
source ~/.git-completion.base
设为全局:
Mac上将这个脚本文件复制到/opt/local/etc/bash_completion.d目录下。Linux复制到/etc/bash_completion.d/目录下。在Bash启动时自动加载它。
Windows 下使用msysGit安装,默认使用的Git Bash已经配置好了。
2.7.2 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 co就等同于git checkout
$ git config --global alias.unstage 'reset HEAD --'
这里定义了一条命令unstage,然后
$ git unstage fileA等同于$ git reset HEAD fileA
$ git config --global alias.last 'log -1 HEAD' 显示最后一次提交的日志信息
运行外部命令:
$ git config --global alias.visual '!gitk'
相关推荐
《ProGit.pdf--git学习教程》是Scott Chacon和Ben Straub共同编写的关于Git版本控制系统的官方学习指南。本教程涵盖了Git的基本概念、工作流程、配置、分支管理、远程仓库操作、服务器部署、分布式工作模式、GitHub...
Git-2.28.0-64-bit.exe Git-2.28.0-64-bit.exe Git-2.28.0-64-bit.exe
Git是一种分布式的版本控制系统,它...整体来看,这本书是学习Git必备的全面指南,涵盖了从基础到高级的各种Git用法,同时特别关注了GitHub这一重要平台,为希望掌握现代版本控制技能的开发者提供了宝贵的知识和技巧。
Git是世界上最流行的分布式版本...总之,Git-2.18.0-64-bit作为Git的最新64位Windows版本,为开发者提供了强大的代码版本管理工具,通过不断的学习和实践,开发者可以充分利用Git提高工作效率,更好地协作开发项目。
Git安装包快速下载;git资源包,Git下载,Git压缩包;Git工具下载;Git-2.21.0-64-bit.zip;Git工具下载
git-lfs-windows-v3.2.0.exe
- 本章概述了版本控制的基本概念,并介绍了Git的基础知识,为后续章节的学习打下了坚实的基础。 #### 二、Git基础 **2.1 取得项目的Git仓库** - **从当前目录初始化**:使用`git init`命令在一个新的目录中创建一...
Git-2.28.0-64-bit.exe 是适用于Windows 64位操作系统的Git官方安装程序,该版本为2.28.0,意味着它包含了最新的功能和性能改进。 **Git基础概念** 1. **版本控制**:Git的核心功能是版本控制,它能跟踪文件和目录...
Git-2.12.0-64-bit 64位下载
Git-2.41.0-64-bit window版本是针对Windows操作系统的一个特定构建,提供64位架构的支持。这个版本的发布,意味着用户可以在Windows环境下享受到Git的最新功能和性能优化。 Git的核心特性包括: 1. 分布式:每个...
Git-2.34.0-64-bit安装包
Git-2.23.0-64-bit--Windows安装包是一个专门为Windows操作系统设计的64位Git版本,它包含了所有必要的组件,使得用户可以在Windows环境下无缝地使用Git。 Git的核心功能包括: 1. 版本追踪:Git能够记录文件和...
Git-2.6.4-64-bit,windows版本
Git-2.34.0-64-bit.rar是一个包含Git的64位安装包,适用于Windows操作系统。这个压缩包中的主要文件是"Git-2.34.0-64-bit.exe",这是Git的可执行安装程序,用于在Windows上部署Git环境。 Git的核心功能包括版本控制...
"git-2.45.0-64bit.exe" 是Git的特定版本,即2.45.0版本的64位Windows安装程序。这个文件是为Windows用户设计的,确保在64位操作系统上顺利运行Git。 Git的核心特性包括: 1. 分布式:每个开发者的本地仓库都包含...
HTML CSS JS 学习、git-笔记HTML CSS JS 学习、git-笔记 HTML CSS JS 学习、git-笔记HTML CSS JS 学习、git-笔记 HTML CSS JS 学习、git-笔记HTML CSS JS 学习、git-笔记 HTML CSS JS 学习、git-笔记HTML CSS JS ...
Git-2.18.0-64-bit安装包是专为Windows 64位操作系统设计的,确保在高性能的64位环境下运行时,Git的所有功能都能得到充分发挥。 Git的2.18.0版本是一个重要的更新,它可能包含了多项性能优化和新特性。例如,这个...
标题中的"Git-2.19.1-64-bit.exe"表明这是一个Git的64位版本,具体为2.19.1版本的安装程序,适用于Windows操作系统。这个版本的发布可能包含了性能优化、新功能或对已知问题的修复。 Git的核心理念在于它允许开发者...
Git-2.33.1-64-bit和Git-2.28.0-64-bit.exe
Git是世界上最流行的分布式版本控制系统,广泛应用于软件开发...通过Git-2.15.1.2-64-bit和Git-2.15.1.2-32-bit的安装,以及参考git-cheatsheet.PDF,用户可以系统地学习和熟练运用Git进行版本控制,提升团队协作效率。