Git教程笔记

来源:互联网 发布:不实名域名注册商 编辑:程序博客网 时间:2024/04/30 21:27

1Git基础说明

1.1Git与subversion的区别

  • Git只关注文件数据的整体内容是否发生改变,而不关心文件内容的具体差异

  • Git是分布式的版本控制系统,因此大多数的操作不需要网络环境

  • 所有保存在Git数据库中的东西都是通过对内容的SHA-1计算的hash值作为索引而不是靠文件名

  • 当把本地工作推送到服务器上时,Git必须服务器上的更新合并到本地后才能推送,而Subversion会在服务器端自动合并提交的更新

1.2Git文件状态变化表

对于任何文件,在Git内部只有三种状态:已提交(表示已经保存在本地数据库中),已修改(修改了某个文件)和已暂存(把已修改的文件放在下次提交时要保存的清单中)

Git文件状态变化表初始状态操作目标状态未跟踪git add未修改未修改编辑文件已修改已修改git add已暂存已暂存git commit未修改未修改git rm未跟踪

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命令

  1. 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仅显示指定提交者相关的提交


  2. 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分支上重新做一遍.# 注意!!永远不要衍合那些已经推送到公共仓库的更新!!


0 0