Git使用入门
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,355
On Slideshare
1,355
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
6
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. git攻略 by 李春城chuncheng.li@dianping.com
  • 2. git基本概念 暂存区 (stage) 暂存区:为了更高效,更快速的完成工作 稍后具体介绍各个命令的时候在介绍这三个的原理
  • 3. 目 • git前奏录 • git基本概念 • 配置、初化化 • 基本命令 • 暂存区 • 检出、重置 • git进阶 • 冲突解决 • 分支 • 标签、里程碑 3
  • 4. git前 远程奏 办公 重置 爱上 .git目录 提交 git 每日 备份
  • 5. 配置:git config配 git config –-system key.value {/etc/config} 优先级最低置 git config –-global key.value {~/.gitconfig}文 git config key.value {.git/config} 优先级最高件 一般的配置项: user.name user.email alias.别名 git config alias.ci “commit –u” color.ui true git config –e –-global git config --unset key.value 在哪可查看远程版本路径?
  • 6. git支持的协议初 ssh(scp)githttp(s)地地协议始 git init化 git clone <repository> <local directory> 文件+版本库均检出,是一个对等工作区,只能Pull,不能push版 git clone –bare <repository> <local directory.git>本 只检出版本库(祼库)库 git clone –mirror <repository> <local directory.git> 与bare区别:在<repository>可以fetch <local repository> 注意:创建一个祼版本库后,第一次用git push会报错,因为远程 版本库还没有任何分支,所以第一次提交命令后面要跟上一个分支 号 eg: git push /path/to/repo/nullrepo.git master
  • 7. git add基 -i本 -u -A命 git status令 位于第二列红色的M(红二):工作区—暂存区 第一列绿色的M:暂存区-版本库 git status -s 精简输出 git status –s –b 查看当前工作分支 (git branch) git diff git diff 工作区—暂存区 git diff HEAD 工作区—版本库 git diff –cache 暂存区—版本库 git diff –staged 暂存区—版本库 比较文件输出的一堆内容是什么
  • 8. 基 git clean –fd 清除工作区未加入版本库的非跟踪文件和目录本 git checkout . 用暂存区内容刷新工作区命 git commit –a 对本地所有变更文件(修改、删除)提交令 git cat-file –t <版本> 查看类型 tree blob commit git cat-file –p <版本> 查看版本提交的内容
  • 9. master 代表分支master中最新的提交(分支名不一定是master版 refs/heads/master 或 heads/master本 HEAD 最近的一次提交号 HEAD^ 最近两个提交 || HEAD^1 HEAD^^ 最近三次提交 || HEAD^2 a34690 a34690^^ || A34690~2 :访问 HEAD:path/to/file a34690^3:path/to/file :path/to/file 暂存区中的文件
  • 10. HEAD指针重 HEAD指针永远指向当前分支的最近一次提交置 more .git/refs/heads/master(假如当前分支在master分支)命 可以人为的改变HEAD指针 git reset git reset –hard 版本号 [-- file]令 重置三个区域到版本号,是最危险的操作,会删除local的多余文件 git reset –soft 版本号 [– file] 改变HEAD指针,不改变local和stage git reset –mixed 版本号 [-- file] 改变HEAD指针,重置stage,不改变Local (默认操作) 恢复—hard的结果 git reflog show master | head 6 git reset –hard master@{3} 哈唏值是怎么计算来的?
  • 11. 检 危险命令出 git checkout branch – filename 维持HEAD不变,用branch指向的filename替换暂存区和工作区的相应文命 件令 git checkout branch 检出branch分支,更新HEAD以指向branch分支,更新暂存区和工作区 git checkout –b branch start_point git checkout 汇总显示工作区、暂存区与HEAD的差异 git checkout – filename 用暂存区中filename文件来覆盖工作区中的filename文件(危险) git checkout . 或 git checkout -- . 会取消所有本地的修改,相当于暂存区的所有文件直接覆盖本地文件
  • 12. 冲突一:修改不同的文件冲 有其他用户已经push,会push失败,除非强制push -f突 解决:先pull ( pull = fetch + merge) 说明:可以禁用强制push解 git config receive.denyNonFastForwards true决 merge默认会自动提交,如果不想commit,可以提供—no-commit 冲突二:修改相同文件的不同区域 同冲突一方案解决 git blame filename可以查看每一行是谁改的 冲突三:修改相同文件的相同区域 手工编辑完成冲突解决 git add -u <<<<<<(七个小于号) 我自己的版本 =======(七个等于号) 他人更改的版本 >>>>>>>(七个大于号) 图形工具完成冲突解决 git mergetool 需要安装 以下之一 kdiff3 meld tortoisemerge araxis A: 共同祖先版本 B: 我的版本 C: 他人的版本
  • 13. 冲突四:一个用户更改了文件名,另一个用户更改了文件的内容冲 解决方案同冲突一,可以用pull自动合并突 冲突五:任何软件都无法解决的问题 一个用户把函数名改了或者把函数的函数体改成了另外的功能,另一个解 用户还是在用这个用户,这是人为造成的bug,git也无能为力。决 冲突六:两个或者多个用户同时修改文件名 解决方案,共同商定用哪个文件名 命令行方式: git rm 删除不要的文件 git add 最后的文件 git commit 问答式: git mergetool 冲突的配置: merge.conflictstyle 设置标记风格,默认merge || diff3 merge提供本地和他人的代码 diff3提供本地、祖先、他人的代码 merge.tool 配置图形化工具
  • 14. git tag –n<num>显示<最多num行>里程碑标 git describe 显示最近的一个里程碑签 git tag <tagname> [<ID>] 创建轻量级里程碑 git tag –a <tagnme> [<ID>] 创建带说明的里程碑 git tag –m <msg> <tagname> [<ID>] 创建带说明的里程碑 git tag –s <tagname> [<ID>] 创建带签名的里程碑 git tag –u <key-id><tagname> [<ID>] 创建带签名的里程碑 git tag –d <tagname> 删除里程碑 说明: 里程碑一般只存在于本地 可以用git push origin mytag 显示推送到版本库以共享给他人 用户获取里程碑 git pull git pull origin refs/tags/mytag:refs/tags/mytag
  • 15. git branch 显示当前所有的分区,*号表示当前分区分 git branch <branchname> 创建分区支 git branch <branchname> <start-point> git branch –d <branchname> 删除分区(已经有过合并不能删除) git branch –D <branchname> 强制删除分区 git branch –m <oldbranchname> <newbranchname> 重命名分区 git branch –M <oldbranchname> <newbranchname> 强制重命名分区 git merge <branchname>合并到当前分区