Git教程笔记
来源:互联网 发布:不实名域名注册商 编辑:程序博客网 时间:2024/04/30 21:27
1Git基础说明
1.1Git与subversion的区别
Git只关注文件数据的整体内容是否发生改变,而不关心文件内容的具体差异
Git是分布式的版本控制系统,因此大多数的操作不需要网络环境
所有保存在Git数据库中的东西都是通过对内容的SHA-1计算的hash值作为索引而不是靠文件名
当把本地工作推送到服务器上时,Git必须服务器上的更新合并到本地后才能推送,而Subversion会在服务器端自动合并提交的更新
1.2Git文件状态变化表
对于任何文件,在Git内部只有三种状态:已提交(表示已经保存在本地数据库中),已修改(修改了某个文件)和已暂存(把已修改的文件放在下次提交时要保存的清单中)
2Git获取帮助
git help <verb>
git <verb> –help
man git-<verb>
3Git的配置
3.1git配置存放点
git配置有三个级别的配置存放点,每个级别的配置会覆盖上层的相同配置
/etc/gitconfig
其中的配置对整个系统起作用,通过git config –system来设定
~/.gitconfig
用户目录下的配置文件只适用于该用户,使用git config –global来设定
work-dirctory/.git/config文件
这里的配置仅针对当前项目有效,使用git config来设定
3.2常用的git配置项
3.2.1用户名称和email
这两条配置很重要,git提交时都会引用这两条信息,说明是谁提交了更新.
git config --global user.name "darksun"git config --global user.email "lujun9972@gmail.com"
3.2.2默认文本编辑器
当git需要你输入一些额外消息时,会自动调用一个默认外部文件编辑器.默认为操作系统指定的默认编辑器
git config --global core.editor emacs
3.2.3差异分析工具
Git可用理解kdiff3,tkdiff,meld,xxdiff,vimdiffgvimdiff,ecmerge和opendiff等合并工具的输出信息
git config --global merge.tool vimdiff
3.2.4查看配置信息
# 查看所有的配置项git config --list # 有时候会看到重复的变量名,说明它们来自不同的配置文件# 直接查看某个变量的设定,只要把特定名称跟在后面即可.git config user.name
3.2.5定义git命令的别名
# 设置别名git config --global alias.co checkout # 设置git co为git checkout的别名git config --global alias.visual "!gitk" # 设置git visual为执行命令gitk
4Git的使用
4.1Git的一般用法
###############初始化操作############### 1. 初始化当前目录,为git版本控制作准备git initgit clone $仓库url # 1. 克隆已有的仓库到本地###############版本控制############### 2. 检查当前文件的状态git status# [编辑忽略文件清单]# 在名为.gitignore的文件中列出要忽略的文件模式# 3. 跟踪新文件,此时文件加入跟踪列表,但状态为未修改git add $要跟踪的文件路径 # 若文件路径为目录,则递归跟踪目录下的所有文件.# 4. 修改已跟踪文件# 删除已跟踪文件git rm# 移动已跟踪文件git mv $from_file $to_file # 相当于mv $from_file $to_file;git rm $from_file;git add $to_file# 5. 将已修改的文件放入暂存区git add $要暂存的文件路径 # git add命令会根据目标文件的状态不同而产生不同的效果# [查看暂存后那些文件进行了改变]git diff # 比较的是当前文件和暂存区域快照之间的差异# 6. 提交暂存区的快照git commit # 使用-a选项可用跳过暂存这一步,自动把已经跟踪的文件暂存起来并提交# [查看已经暂存起来的文件和上次提交时的快照之间的差异]git diff --cached# 7. 修改最后一次提交git commit --amend # 使用当前的暂存快照来替代最后一次提交# 7. 取消最后一次暂存/取消对文件的修改# 使用git status会提示怎么做
4.2远程仓库命令
同他人协作开发某个项目时,需要管理远程仓库,以便推送/拉取数据,分享各自的工作进展.
###############远程仓库操作############### 查看当前的远程仓库git remote # 列出每个远程仓库的别名git remote -v # 列出每个远程仓库的别名和对应的URL# 添加远程仓库git remote add $远程仓库别名 $远程仓库url# 从远程仓库更新本地数据git fetch $remote_name # 从远程仓库拉取所有本地仓库没有的数据,但不会自动合并本地仓库的数据git pull # 默认将远程仓库origin的master分支合并到当前的master分支# 推送数据到远程仓库git push # 默认将本地master分支推送到远程仓库的origin的master分支git push $remote_name $branch_name # 将本地的分支$branch_name推送到远程仓库$remote_name中# 重命名远程仓库别名git remote rename $old_alias $new_alias# 删除远程仓库别名git remote rm $远程仓库别名# 查看远程仓库信息git remote show $remote_name
4.3tag命令
git中的标签有两种:轻量级的标签和带附注的标签
###############标签操作############### 添加轻量级标签git tag $标签名# 添加带附注的标签git tag -a $标签名git tag -a $标签名 -m $标签说明git tag -s $标签名 -m $标签说明 # 使用GPG来签署标签git tag -a $标签名 $早前某次提交的检验和(或者前几位字符) # 为早前的某次提交作tag# 查看标签信息git show $标签名# 验证标签git tag -v $标签名 # 调用GPG来验证签名,需要有签署者的公钥,存放在keyring中# 推送taggit push $remote_name $tag名称 # 推送标签到远程仓库git push $remote_name --tags # 一次推送所有的标签
4.4log命令
git log选项
选项 说明 -p按patch格式显示每个更新之间的更新–stat显示更新的统计信息–shortstat只显示–stat中最后的行数修改添加移除统计–name-only仅在提交信息后显示已修改的文件清单–name-status显示新增,修改,删除的文件清单–abbrecv-commit近显示SHA-1的前几个字符,而非所有的40个字符–relative-date使用相对时间显示–pretty=…使用其他格式显示历史提交信息,可用选项包括oneline,short,full,fuller,format:格式标示符-n(n为数字)仅显示最后提交的n条记录–since/–after仅显示指定日期之后的修改–until/–before仅显示指定日期之前的提交–author仅显示指定作者相关的提交–committer仅显示指定提交者相关的提交git log –pretty=format:格式说明符
选项 说明 %H提交对象的完整hash字符串%h提交对象的简短hash字符串%T树对象的完整hash字符串%t树对象的简短hash字符串%P父对象的完整hash字符串%p父对象的简短hash字符串%an作者名字$ae作者的email%ad作者修订的绝对日期%ar作者修订的相对日期%cn提交者名字%ce提交者的email%cd提交的绝对日期%cr提交的相对日期%s提交说明
4.5分支命令
远程分支的格式一般为"远程仓库名/分支名"
# 新建分支git branch $分支名 # 但并未切换到该分支# 切换分支git checkout $分支名 git checkout -b $分支名 # 新建并切换到分支处# 跟踪分支:一种跟远程分支有直接联系的本地分支,在跟踪分支中输入git push 和git pull会自动推断相关的远程分支git checkout -b $分支名 $远程仓库名/$远程分支名 # 新建指定分支,并绑定为指定远程分支的跟踪分支git checkout --track $远程仓库名/$远程分支名 # 新建指定远程分支的跟踪分支# 合并分支git merge $分支名 # 将分支名的分支合并到当前分支处# 删除分支git branch -d $分支名 # 若指定分支包含当前分支未合并的工作,则删除会失败git branch -D $分支名 # 强制删除分支# 冲突的合并git status # unmerged处显示哪几个文件有冲突git mergetool # 使用自定义的图形化工具合并文件,当然也可以用vi来手工合并git add $合并后的文件 # 将合并后的文件标记为冲突已解决# 显示本地分支git branch # 显示当前所有分支的清单git branch --merge # 查看那些分支已经合并入当前分支,这些分支可用被del了git branch --no-merged # 查看尚未合并的分支# 推送分支git push $远程仓库名 $本地分支名 # 推送指定本地分支到远程仓库中git push $远程仓库名 $本地分支名:$远程分支名 # 推送指定的本地分支到远程仓库中,并命名为指定的远程分支名# 删除远程分支git push $远程仓库名 :$远程分支名 # 可用理解为将本地的空白分支推送到远程仓库覆盖远程分支# 衍合,所谓衍合就是把一个分支里提交的改变在另一个分支里重放一遍git rebase $分支 # 把指定分支的改变在当前分支重作一边形成新的版本git rebase $主分支 $特征分支 # 把特征分支的改变在主分支中重做一边形成新的版本git rebase master server client # 找出client分支从它与server分支的祖先相分离之后的改变在master分支上重新做一遍.# 注意!!永远不要衍合那些已经推送到公共仓库的更新!!
- git教程 自学笔记
- Git教程笔记
- Git教程(笔记)
- 【笔记】Git使用教程
- git 教程(笔记)
- git使用教程笔记
- git教程学习笔记
- 【Git】Git教程最精简笔记
- Git使用教程及笔记
- 廖雪峰Git教程笔记
- git学习笔记兼教程
- git 的学习操作笔记 git教程 伪教程
- [极客学院]git教程笔记1
- Git教程学习笔记(一)
- 《Git教程-廖雪峰》学习笔记
- Git简易教程笔记(1)
- Git简易教程笔记(2)
- 学习Git(对廖雪峰Git教程的摘抄笔记)
- HTTP简介
- F5讲座简单笔记
- 《C陷阱与缺陷》读书笔记
- 如何分析复杂的C语言声明
- Emacs中使用SRecode生成Doxygen风格的注释
- Git教程笔记
- 使用ps查看用户进程下的线程运行情况(AIX)
- 当用fopen读写打开文件时,请使用r+,而不是rw
- Emacs中的shell--Eshell使用笔记
- DB2中使用游标的注意事项
- 《c++编程剖析-问题,方案和设计准则》笔记
- git中文文件名、目录名乱码应该怎么解决?
- org-page配置中的一些注意事项
- Emacs之ido-mode笔记