欢迎访问我的博客,你的支持,是我最大的动力!

深入理解分布式版本控制系统Git

Linux 小马奔腾 7853℃ 评论
目录:
[显示]

《Git高手之路》雅各布·纳热布斯基 2018.04

git版本>2.5.0 测试2.13.7

补充

GitHub下载加速度:
将代码同步到 码云 ,再git clone
最后,修改 .git/config 文件,[remote "origin"]段,把url更换为github的地址即可

Git应用入门

创建git版本库,服务器端
mkdir -p /srv/git
cd /srv/git/
git init --bare random.git
用户端
cd C:\Users\ddonl\Desktop\test
git clone http://192.168.158.139/random.git
cd random
#新添加文件random.c A
git add random.c
git status -s
git commit -a -m "Initial implementation"
#-a/--all 接受被追踪文件的所有变更 -m 添加注释信息
git push
#发布到远端
git config --global push.default simple

#设置个人信息
git config --global user.name "Alice Developer"
git config --global user.email "qing@qq.com"
#查看日志信息
git log
#修改文件后,Modified
git status -s
#查看文件差异
git diff
#提交变更
git commit -a -m "Initialize random number generator"
git push
#重命名/移动文件
mkdir src
git mv random.c src/
#更改文件位置 Renamed
git status -s
git commit -a -m "Directory structure"
#确保目录重构之后使用diff命令输出结果差异不至于太大
#配置git为始终执行重命名和拷贝检测
git config --global diff.renames copies

git add README Makefile
git status -s
git commit -a -m "Added Makefile and README"
#文件更名
git mv src/random.c src/rand.c
git commit -a -m "change name"
git push
git pull
git show

创建标签
git tag -a -m "random v0.1" v0.1
git tag --list
git log -l --decorate --abbrev-commit
git push origin tag v0.1
git pull

解决合并冲突
合并发生冲突时,在发生冲突的文件中,会有<<<<<<<HEAD...=======...>>>>>>>提交码,这段就是冲突部分

添加和移除文件
git add -v
移除文件
git rm -f filename

撤销对单个文件的修改
#统计文件源代码变更记录
git diff --stat
#撤销对单个文件的修改
git checkout -- src/rand.c

#创建新分支
git checkout -b better-random 或者git branch new-random;git checkout new-random
#显示当前分支
git branch
#将新分支推送到远端
git push --set-upstream origin better-random

合并分支(无冲突)
git merge origin/better-random
撤销未发布的合并(日志引用机制)
git reset --hard @{1}

项目历史管理

有向无环图

可追踪和记录非线性的历史记录。git用来表示项目中可能出现的非线性历史记录的结构叫有向无环图

最新版修订在最上面

分支和标签有时统称为引用refs

查看引用全名:git show-ref

HEAD,最新的修订版本,代表当前分支

用户最少给出4个SHA-1标识符即可

HEAD^代表HEAD的父对象,即上一个提交

git describe

reflog引用日志,存放过去HEAD和分支引用位置及生成原因的临时日志。每次用户因故更新HEAD或者分支首部时,Git会为用户将这些信息存储在引用历史的本地临时日志中

git reflog
git log -g 查看引用日志

git checkout - 定位到当前分支的上一个分支中

上游远程跟踪分支

git log master 显示master分支相关的所有提交记录

blame查看文件历史记录详情

git blame

git blame src/rand.c  查看每一行的修改时间及作者

git gui blame src/rand.c GUI图形化方式

使用git bisect命令查找bug

git log --graph

git shortlog -s -n   #查看贡献-s把提交信息表示为提交数目;-n根据开发者提交的修订数量排序

使用Git进行程序开发

索引index是存储将要提交信息的暂存区。git add <file> 会暂存文件当前内容,并添加到索引中

git status 检查文件状态

git commit -a 可以将未暂存的文件也提交

git系统中三个区域:工作目录、暂存区、版本库

git diff
diff --git a/src/rand.c b/src/rand.c
index f14d5dc..1668189 100644
--- a/src/rand.c
+++ b/src/rand.c
@@ -3,4 +3,5 @@    ####源文件区间 目标文件区间  @@-<起点>,<行数>  +<起点>,<行数>@@
a b
#include <stdlib.h>

-int random_int(int max)
\ No newline at end of file
+int random_int(int max)
+another new line
\ No newline at end of file
###没有变化的空格开头,-被删除的行,+新增的行

git commit --interactive 交互模式提交
git add --interactive 交互模式添加文件
git stash save --keep-index 保存当前状态到暂存区
git stash pop --index 从暂存区取回工作目录状态

git branch testing 创建分支testing
git checkout -b testing 创建新分支testingua 切换当前工作目录到testing分支
git checkout --orphan gh-pages 创建孤儿分支
git checkout testing 检出testing分支

如果当前分支对应的文件变更和将要切换的目标分支没有关联,那么当前分支未提交的变更也会一并移动到新分支中。如果未提交的变更和给定分支有冲突,那么git将会拒绝切换到目标分支,从而防止用户的工作成果遭到破坏

git branch --merge 该操作会执行三路合并,包括当前分支、工作区中未保存的变更和目标分支

git checkout --force 丢弃原有变更

可以在Shell脚本中使用的命令,管道化的
git symbolic-ref HEAD 获取当前分支名称
git rev-parse HEAD 获取当前提交码
git show-ref 或 git for-each-ref 显示所有分支(提交码和分支名称)

git branch --list = git branch

git remote show 查询远程版本库信息

分支的回退和复位

reset在默认情况下不会改变工作目录内容

git reset --keep 尝试保留未提交的变更
git reset --hard 强行删除未提交的变更

分支的删除

一个分支其实就是一个指针,删除一个分支实际上就是删除一个指针

git允许删除已经完全合并过的分支

git branch -d branch_name 删除分支branch_name
git branch -D branch_name 强制删除分支branch_name

用户不能删除当前分支

分支的重命名

git branch -m

工作区管理

忽略文件

 

git协议替换

两种clone方式
https方式,地址为https://github.com/CanalClient/canal-go.git
ssh方式,地址为git@github.com:CanalClient/canal-go.git
#
# 把 git:// 替换成 https:// 方便使用 https 协议
git config --global url."https://".insteadOf git://
# https 转到 ssh 协议
git config --global url.git@github.com:.insteadof https://github.com/

 

 

转载请注明:轻风博客 » 深入理解分布式版本控制系统Git

喜欢 (0)or分享 (0)