SlideShare a Scribd company logo
1 of 30
Git 实战
项目开发流程

李华刚 - 平台研发部
@jr子木
Agenda
• 远程仓库克隆
• 本地仓库配置
• 分支管理

• 功能开发
• GUI工具
• 合并发布

|2
git-help – 打开命令的本地HTML手册页
模式
git help [-w] [COMMAND]
示例

1. git help help
2. git help -w clone

―浏览器‖方式打开
1.

git config --global help.format html

2.

git config --global web.browser firefox

|3
git-clone – 克隆一个仓库到一个新的目录
模式
git clone <repository> [<directory>]
示例

1. git clone http://git.intra.weibo.com/huagang1/git_demo.git
git_demo # 克隆远程仓库到本地
2. cd git_demo

3. ls –a
.git :Git目录($GIT_DIR)

|4
git-config – 配置开发者用户名和邮箱地址
模式
git config [--global] name [value]
git config --get name

示例
1. git config user.name xxx
2. git config user.email xxx@xxx
配置文件
1.

.git/config:仓库层面

2.

~/.gitconfig:用户层面(--global)

|5
gitignore – 指定不想追踪的文件
模式
.gitignore
.git/info/exclude

示例
1. edit/copy .gitignore
最佳实践
提交 .gitignore 文件到远程中央仓库。

|6
git-status – 显示工作目录的状态
模式
git status [<options>…]
示例

1. git status

[InfoQ专栏] Git历险记(四)—— 索引与提交的幕后故事

|7
git-add – 添加文件内容到索引
模式
git add [<filepattern>…]
示例

1. git add .gitignore
2. git ls-files --stage # 查看暂存区内容
3. git cat-file -p [Content-SHA1] # 查看文件内容
相关知识
索引,也称暂存区(staging area),存放下一次提交的内容。(.git/index)

|8
git-commit - 记录变更到本地仓库
模式
git commit [-a] [-m <msg>] [<file>…]
示例

1. git commit -m ―add .gitignore file‖ # 提交已暂存的文件

提交描述编码(.git/etc/gitconfig)
[i18n]
commitencoding = UTF-8
logoutputencoding = UTF-8
|9
git-branch – 查看、创建分支
模式
git branch [-r | -a] [<pattern>…]
git branch <branchname>

示例
1. git branch # 查看本地仓库的所有分支(.git/refs/heads)
2. git branch demo # 创建“demo”分支
3. ls .git/refs/heads # 一个分支名对应一个文件
4. less .git/refs/heads/demo # 查看“demo”分支内容
[InfoQ专栏] Git历险记(五)—— Git里的分支&合并
| 10
git-checkout – 切换工作目录到另一个分支
模式
git checkout [<branch>]
示例

1. git checkout demo # 切换到“demo”分支工作
2. Make demo dir, then add 1.txt 2.txt 3.txt # 伪代码
3. git status

| 11
git-gui – Git图形化界面
示例
git gui

| 12
git-reset – 重置当前HEAD到指定的状态
模式
git reset [<commit>] <paths>…
git reset (--soft | --mixed | --hard) [<commit>]

示例
1.

git add demo/2.txt demo/3.txt # 添加到索引

2.

git status

3.

git reset HEAD demo/2.txt # 撤销2.txt的变更

4.

git commit -am "add 'demo/3.txt' file"

5.

git reset --soft HEAD^ # 回滚最近一次提交的所有内容,但保留本地变更内容

6.

git reset --hard HEAD^ # 彻底回滚最近一次提交

[警告] 慎用git-checkout命令,其会把所有本地变更都覆盖掉!
| 13
gitk – Git本地仓库浏览器
示例
gitk

| 14
[练手] 改动分支内容并提交
示例
1.

git add demo/2.txt

2.

modify 3.txt file

3.

git status

4.

git commit -m "add 'demo/2.txt' file" #只提交暂存区里的内容

5.

git status

6.

git commit -am "add 3 to 'demo/2.txt' file" # 提交已暂存的3.txt文件内容,但注释有

误!
7.

git reset --soft HEAD^ # 回滚最近一次提交,同时保留本地所有改动的内容

8.

git status

9.

git commit -a -m "add 3 to 'demo/3.txt' file"
| 15
gitk – 可视化冲突比较
示例
1.

Commit ‗conflict.txt‘ to ‗demo‘ branch # 伪代码

2.

Commit 'conflict.txt' to 'master' branch

3.

gitk master...demo # 3个点

| 16
gitk – 可视化冲突比较

| 17
git-merge – 加入多个开发历史到当前分支
模式
git merge <commit>…
示例

1. git status
2. git checkout master # 切换到“master‖分支工作
3. git merge demo # 合并―demo‖分支到当前分支
Auto-merging demo/conflict.txt
CONFLICT (add/add): Merge conflict in demo/conflict.txt # 存在冲突
Automatic merge failed; fix conflicts and then commit the result. # 解决冲突后,再提交

| 18
gitk – 查看冲突

| 19
git-diff – 显示提交之间的变化,解决冲突
示例
1. git status # 查看是否有冲突内容?
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
#

both added:

demo/conflict.txt

2.

git diff # 红色部分

3.

Resolve conflict file content, then commit # 伪代码

4.

git diff

| 20
解决冲突
git commit -am "merge 'demo' branch"

| 21
git-branch – 删除分支
模式
git branch (-d | -D) [-r] <branchname>…
示例

1. git branch
2. git branch -d demo # “demo”分支必须已完全被合并到上游
分支

3. git branch -D demo # [慎用] 强制删除“demo”分支,即使改
动还未被提交

| 22
git-remote – 管理跟踪的远程仓库集
模式
git remote [-v]
git remote add [--mirror=<fetch|push>] <name> <url>

示例
1. git remote -v # 查看远程仓库地址短别名

2. git remote add origin
http://git.intra.weibo.com/huagang1/git_demo.git # 定义远程仓
库地址短别名
| 23
git-fetch – 抓取远程仓库的对象和引用信息
模式
git fetch <repository> [<refspec>…]
示例

1. git fetch # 更新远程改动
2. git branch -r # 查看远程本地分支
3. gitk master...origin/master # 比较改动内容
4. git status
5. git merge origin/master # 合并远程“master”分支到当前分支

| 24
git-pull – 抓取并合并远程仓库的一个分支
模式
git pull <repository> [<refspec>…]
示例

1. git checkout master
2. git pull origin master # 合并远程“origin”仓库的“master‖分支
到当前分支

| 25
git-push – 推送本地分支到远程仓库
模式
git push -u <repository> [<refspec>…]
示例

1. git push -u origin release # 预发布测试分支
2. git push -u origin version # 打Tag(git tag)
3. git push -u origin master # 发布功能

| 26
Workflow

| 27
参考资料
[1] Git
http://git-scm.com
[2] Git Doc
http://git-scm.com/docs/git
[3] Git Tutorial
http://git-scm.com/docs/gittutorial.html
[4] Everyday Git

http://git-scm.com/docs/everyday.html
[5] Git Basics
http://www.slideshare.net/ariejan/git-basics
[6] A successful Git branching model - nvie
http://nvie.com/posts/a-successful-git-branching-model
[译文] http://www.juvenxu.com/2010/11/28/a-successful-git-branching-model

https://github.com/nvie/gitflow
[7] Git历险记 - InfoQ专栏
http://www.infoq.com/cn/git-adventures
[8] Git FAQ
https://git.wiki.kernel.org/index.php/Git_FAQ
https://help.github.com/

| 28
Q/A
Git 实战

More Related Content

What's hot

Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學Duncan Chen
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to gitBo-Yi Wu
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀Wen Liao
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607Charles Tang
 
Git and git hub
Git and git hubGit and git hub
Git and git hub唯 李
 
簡介 GitHub 平台
簡介 GitHub 平台簡介 GitHub 平台
簡介 GitHub 平台Will Huang
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用Will Huang
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - GitAlan Tsai
 
Git &amp; git hub v1.2
Git &amp; git hub v1.2Git &amp; git hub v1.2
Git &amp; git hub v1.2Chris Chen
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgitRhythm Sun
 
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Cloud Tu
 
Git 入門與實作
Git 入門與實作Git 入門與實作
Git 入門與實作奕浦 郭
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學hydai
 
Android 程式設計(4)
Android 程式設計(4)Android 程式設計(4)
Android 程式設計(4)Roy Wang
 
Mecurial hg
Mecurial hgMecurial hg
Mecurial hgiaiyang
 
Ian 20150515 grunt
Ian 20150515 gruntIan 20150515 grunt
Ian 20150515 gruntLearningTech
 
Git & git flow
Git & git flowGit & git flow
Git & git flowAmo Wu
 

What's hot (20)

Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607
 
Git share
Git shareGit share
Git share
 
Git and git hub
Git and git hubGit and git hub
Git and git hub
 
簡介 GitHub 平台
簡介 GitHub 平台簡介 GitHub 平台
簡介 GitHub 平台
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
 
Git &amp; git hub v1.2
Git &amp; git hub v1.2Git &amp; git hub v1.2
Git &amp; git hub v1.2
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgit
 
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)
 
Git 入門與實作
Git 入門與實作Git 入門與實作
Git 入門與實作
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學
 
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
 
Android 程式設計(4)
Android 程式設計(4)Android 程式設計(4)
Android 程式設計(4)
 
Mecurial hg
Mecurial hgMecurial hg
Mecurial hg
 
Git
GitGit
Git
 
Ian 20150515 grunt
Ian 20150515 gruntIan 20150515 grunt
Ian 20150515 grunt
 
Git & git flow
Git & git flowGit & git flow
Git & git flow
 

Viewers also liked

高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查bluedavy lin
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查bluedavy lin
 
线上问题排查交流
线上问题排查交流线上问题排查交流
线上问题排查交流Edward Lee
 
Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务Wensong Zhang
 
Erlang及其应用
Erlang及其应用Erlang及其应用
Erlang及其应用Feng Yu
 
Erlang高级原理和应用
Erlang高级原理和应用Erlang高级原理和应用
Erlang高级原理和应用Feng Yu
 
Inside Erlang Vm II
Inside Erlang Vm IIInside Erlang Vm II
Inside Erlang Vm IIFeng Yu
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理zijia
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理zijia
 
LVS development and experience
LVS development and experienceLVS development and experience
LVS development and experienceWensong Zhang
 
Java memory problem cases solutions
Java memory problem cases solutionsJava memory problem cases solutions
Java memory problem cases solutionsbluedavy lin
 
账务系统设计及应用
账务系统设计及应用账务系统设计及应用
账务系统设计及应用wang zaixiang
 
VMIL keynote : Lessons from a production JVM runtime developer
VMIL keynote : Lessons from a production JVM runtime developerVMIL keynote : Lessons from a production JVM runtime developer
VMIL keynote : Lessons from a production JVM runtime developerMark Stoodley
 
Python在豆瓣的应用
Python在豆瓣的应用Python在豆瓣的应用
Python在豆瓣的应用Qiangning Hong
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术Feng Yu
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Feng Yu
 
Redis原生命令介绍
Redis原生命令介绍Redis原生命令介绍
Redis原生命令介绍Edward Lee
 
Implementing a JavaScript Engine
Implementing a JavaScript EngineImplementing a JavaScript Engine
Implementing a JavaScript EngineKris Mok
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 

Viewers also liked (20)

高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
线上问题排查交流
线上问题排查交流线上问题排查交流
线上问题排查交流
 
Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务
 
Erlang及其应用
Erlang及其应用Erlang及其应用
Erlang及其应用
 
Erlang高级原理和应用
Erlang高级原理和应用Erlang高级原理和应用
Erlang高级原理和应用
 
Inside Erlang Vm II
Inside Erlang Vm IIInside Erlang Vm II
Inside Erlang Vm II
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理
 
LVS development and experience
LVS development and experienceLVS development and experience
LVS development and experience
 
Java memory problem cases solutions
Java memory problem cases solutionsJava memory problem cases solutions
Java memory problem cases solutions
 
DAE
DAEDAE
DAE
 
账务系统设计及应用
账务系统设计及应用账务系统设计及应用
账务系统设计及应用
 
VMIL keynote : Lessons from a production JVM runtime developer
VMIL keynote : Lessons from a production JVM runtime developerVMIL keynote : Lessons from a production JVM runtime developer
VMIL keynote : Lessons from a production JVM runtime developer
 
Python在豆瓣的应用
Python在豆瓣的应用Python在豆瓣的应用
Python在豆瓣的应用
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言
 
Redis原生命令介绍
Redis原生命令介绍Redis原生命令介绍
Redis原生命令介绍
 
Implementing a JavaScript Engine
Implementing a JavaScript EngineImplementing a JavaScript Engine
Implementing a JavaScript Engine
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 

Similar to Git 实战

Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)flylon
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence TutorialHo Kim
 
Git使用入门
Git使用入门Git使用入门
Git使用入门dpf2e
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshellNelson Tai
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍medcl
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報Bachue Zhou
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程gemron
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用Philip Zheng
 
Learn git
Learn gitLearn git
Learn git甘 李
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuanWei-Yuan Chang
 
Github in xcode
Github in xcodeGithub in xcode
Github in xcode郁凱 曾
 
Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)Hsin-lin Cheng
 
Git introduction
Git introductionGit introduction
Git introductionmythnc
 
用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制Hsuan-Ju Lin
 
Submodule && subtree
Submodule && subtreeSubmodule && subtree
Submodule && subtree哲 于
 

Similar to Git 实战 (20)

Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
Git使用入门
Git使用入门Git使用入门
Git使用入门
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
Git 教學
Git 教學Git 教學
Git 教學
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
20150313 ian git
20150313 ian git20150313 ian git
20150313 ian git
 
Learn git
Learn gitLearn git
Learn git
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
 
Github in xcode
Github in xcodeGithub in xcode
Github in xcode
 
Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)
 
Git introduction
Git introductionGit introduction
Git introduction
 
Git Tutorial 教學
Git Tutorial 教學Git Tutorial 教學
Git Tutorial 教學
 
用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制
 
Submodule && subtree
Submodule && subtreeSubmodule && subtree
Submodule && subtree
 

Git 实战