git ABC

0.git简介

git是一种高效、快速的分布式版本管理工具。特点:

本地拥有整个代码仓库(可以将远程仓库全部同步到本地);

每次提交都生成所有代码的一个快照(包含所有代码的引用而不只是差量),并且生成一个sha-1标识码作为此次提交的索引;

本地代码划分为工作区(可修改,测试稳定后加入阶段区)、阶段区(保存相对稳定的代码,准备提交)、提交区(保存稳定的代码,准备推送到远程库)3个区域。


1.ubuntu安装git

$sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev git-core

 

2.git仓库(Repository)管理


2.1仓库的组成

三种对象及其关系:提交(commit)、树(tree)——文件列表、原文(blob)——源码;大致关系为提交引用树,树引用原文。不必深究。

仓库的存放位置:.git文件夹


2.2 创建仓库


2.2.1 对本地文件夹进行管理

$cd mydir

$echo "this is A" >> a.c

$echo "this is B">> b.c

$git init  (注:初始化仓库,建立.git目录)

$git add * (注:在git内部系统中,共有3个区域。工作区、阶段区、已提交区。工作区为当前所有的修改,阶段区的内容通过git add添加,已提交区用git commit)

$git status  (注:显示当前工作区与阶段区的内容)

$git commit -a -m "first created"  (注:-a表示本次提交包括工作区的修改,而不只是阶段区的内容 -m 表示提交的说明。)

$git branch (注:显示当前分支)

*master (注:默认主分支)


2.2.2克隆远程仓库

$git clone remote_url local_dir (注:克隆远程仓库到本地local_dir目录下,同时会checkout当前分支)


2.3分支管理


2.3.1创建、查看分支

$git branch -b temp (注:以当前分支的最后一次提交为起点创建分支temp)

$echo "add D1" >> a.c

$git add a.c

$git commit -m "this is D1" (注:提交D1到分支temp,现在temp的最后一次提交是D1)

$echo "add D2" >> a.c

$git add a.c

$git commit -m "this is D2" (注:提交D2到分支temp,现在temp的最后一次提交是D2)

$echo "add D2 D2" >> a.c

$git add a.c

$git commit --amend (注:重新提交D2到分支temp,相当于删除刚才的提交,然后再提交)

 

$git checkout master (注:从分支temp切换到分支master,亦即从分支temp的最后一次提交切换到分支master的最后一次提交,修改工作区)

$echo "add C2" >> a.c

$git commit -a -m "this is C2"

$echo "add C3" >> a.c

$git commit -a -m "this is C3"

$echo "add C4" >> a.c

$git commit -a -m "this is C4"

 

$git log (注:查看当前分支的提交记录,可以获取C2的SHA-1标识)

$git branch development 39c2a2399a73...417 (注:以C2为起点创建分支development)

$git branch development2 development (注:以development分支的最后一个结点为起点创建分支development2)

$git branch -d development (注:删除分支development,如果工作区的内容没有提交就无法删除)

$git branch -D development (注:强制删除分支development,忽略工作区)

 

$git branch (注:查看所有分支)

$git merge-base master development (注:显示master分支和development分支的共同结点的sha-1)


2.3.2合并分支与解决冲突

$git checkout master

$git merge temp (注:将分支temp的改动合并到当前分支即master上并提交。实际上就是将temp分支的最后一次提交合并到master分支的最后一次提交上,再产生一次提交)

$git merge  --no-commit  temp (注:将分支temp的改动合并到当前分支即master上但不提交,只修改工作区)

$git merge -m "merge from temp" temp (注:将分支temp的改动合并到当前分支即master上并提交,提交说明为merge from temp)


$git cherry-pick sha-1 (注:将提交sha-1合并到当前分支上,提交sha-1可以属于任意分支)


如果合并中出现冲突,系统会自动以一种特殊的格式写入源文件。一般的冲突格式如下:

<<<<<<< HEAD

this is C5

=======

this is A_2

>>>>>>> temp

前面上当前分支中的内容,后面是temp分支中的内容。

当冲突比较简单时,可以手动修改源文件,解决冲突后,调用git commit提交(当合并出现冲突时,系统是不会提交的)。

当冲突比较复杂时,可以执行git mergetool启动事先配置的外部工具进行合并(如何配置,下文有述)。


 2.3.3改变分支的起点

rebase的具体过程是找到两个分支的共同结点(即分叉处),逐个找到当前分支中每个节点与共同结点的差别,并

把此差别提交到另一个分支上,从而在另一个分支上产生一次或多次提交。

假设master是主分支,development是某个测试分支。

$git checkout development

$git rebase master (注:将当前分支rebase到master分支上)

$git rebase --onto master development issue (注:把development分支中与issue分支共同结点以后的部分rebase到master分支上)

 

2.3.4 删除提交

$git log --pretty=oneline (注:--pretty=oneline 表示每次提交的信息占一行)

$git reset --soft HEAD~2 (注:--soft 表示只复位已提交区;HEAD~2表示越过2个结点,即复位到倒数第4个结点)

$git reset --hard HEAD^^^ (注:--hard表示复位已提交区、暂存区和工作区;HEAD^^^表示复位到倒数第4个结点)

$git reset --soft 417114d...bbcc (注:复位到SHA-1标识为417114d...bbcc的那次提交)

与git reset类似的是git revert,后者会产生一次新的提交(与以前的提交相反,一般不建议使用,以免引起混乱)

 

2.3.5 无引用的提交恢复引用

导致无引用提交的操作:复位、删除分支

恢复引用的方法:首先找到无引用提交的sha-1,然后git reset sha-1或 git branch sha-1

获取无引用提交的sha-1的方法:git log (只显示当前分支的结点) 或 git reflog(可以显示所有分支的结点)

 

3. 与远程仓库进行交互

$git clone remote_url local_dir (注:克隆远程仓库到本地,建立了远程库远程分支origin/master及其本地跟踪分支master,并checkout到master)

$git fetch origin (注:从远程库同步代码,改变了远程库远程分支origin/master)

$git pull origin(注:从远程库同步代码,改变了远程库远程分支origin/master,并把origin/master合并到master上)

......修改代码,并提交到本地跟踪分支master......

$git push origin (注:将本地修改同步到远程库,完整格式为git push git_name src:des,当des与src同名时可省略:des)

 


4.比较代码

$git diff HEAD (注:比较当前工作区与上一次提交,HEAD可省略)

$git diff --cached HEAD (注:比较当前暂存区和上一个提交)

$git diff sha-1 sha-1 (注:比较两个提交)


5.生成patch与合入patch

$git format-patch sha-1 sha-1 (注:比较两次提交,生成patch)
$git am [patch|patch_dir] (注:将某个patch或某个目录下所有的patch合入)


 6.打标签

$git tag -a v1.4 -m "version1.4" (注:为当前分支的最后一个提交创建标签对象,名称为v1.4,注释为version1.4,-a 表示创建标签对象而不是轻量级标签)

$git tag  v1.2 sha-1 (注:为标识为sha-1的提交创建轻量级标签,名称为v1.2)

$git tag (注:查看所有的tag)

$git show v1.4 (注:查看指定名称的tag)

$git tag -d v1.4(注:删除名称为v1.4的tag)

 

7.git配置

配置文件及其效力:/etc/gitconfig  小于 ~/.gitconfig 小于 .git/config

修改配置文件的相应命令:git config --[system|global|local]  name value(当然也可以不通过命令,直接编辑配置文件)

基本信息配置:user.name     user.email

查看当前配置:git config --list

忽略文件配置:创建或修改.gitignore文件(与.git在同级目录)

取消GIT对文件的跟踪管理:git rm [-r] --cached filename

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值