Git

简介:

参考, Git 使用指南

图解GIT, 很好, 很强大

一个成功的Git分支模型, 很清楚的阐述了git的分支的使用

 

Git基础

建立Git仓库

git init

在任意目录下执行, 将此目录变为工作树, 其实就是在目录中创建隐藏的.git目录(仓库)

仓库和工作树的区别? 
仓库是指, 隐藏的.git目录, 工作树指当前整个目录 
只要有仓库, 可以通过git clone, 简单的恢复整个工作树

 

注册用户

$ git config --global user.name "Your Name Comes Here"

$ git config --global user.email you@yourdomain.example.com

注意,这里config可以有3层,默认是--local,即是库级别

    --system           use system config file
    --global             use global config file
    --local               use repository config file 

分别对应于,/etc/gitconfig,~/.gitconfig,.git/config
让你可以从系统,用户,和库的层面去定义不同的配置
参考,http://hezhao2000.blog.163.com/blog/static/12243636720130233261165/

 

生成快照(snapshot), 向仓库添加需要管理的文件

Git在向仓库中添加文档时并非简单地复制,需要对文档进行处理, 生成Git 仓库所能接受的数据格式, Git 称这个过程为"take a snapshot".

所生成的快照被存放到一个临时的存储区域,Git称该区域为索引

git add .   #增加当前目录下的所有文件和子目录到索引

git add file1  #增加某个file到索引

 

设置某文件或目录不被git管理, 这样方便对其他所有文件使用add .

echo "zh" > .gitignore  #忽略zh目录

 

提交 (commit)

git commit    #commit索引里面的内容

git commit -m "你的版本更新信息"

git commit –a   #commit当前目录下所有改动的文件

 

image

 

查看版本历史

git log

git log  #commit的历史log

git log --stat –summary  #可以显示出log中commit所提交的改动细节

git show

$ git show dfb02e6e4f2f7b573337763e5c0013802e392818 #根据commitid, 查看某个commit的细节

git show HEAD   #最新的commit细节  git show HEAD^ # 查看HEAD 的父版本commit细节 
git show HEAD^^ # 查看HEAD 的祖父版本commit细节  git show HEAD~4  #^^^^

 

撤销提交, 回退

git reset, git reset简介

git reset commitid   #将版本回退到某个commit

git reset Head #git reset   #将版本回退到最新版本, 其实什么都不做

git reset Head^   #将版本回退到最新版本的前一个版本

3种参数, --hard、—soft、—mixed

最直接的是, –hard, 索引和工作树都做reset, 新的更新全部丢弃, 所以比较威胁慎用 
默认的是, –mixed, 只reset索引, 而工作树不变.

使用效果, 今天做了10次commit, 使用reset到退到最初版本, 但是最新的代码还在工作树上的, 所以使用git commit –a, 可以将今天所有的更新一次性commit进去

最温柔的是, –soft, 索引和工作树都不reset, 仅仅把HEAD指向<commit>. 
这种情况, 因为更新还在索引中, 直接git commit就可以重新commit内容 
和mixed的不同就是, mixed索引中的数据会删除, 所以光git commit不行, 需要git commit -a

 

Git协同

git clone

其他人如果想参加开发, 首先必须把代码在本地clone一份

git clone lyr@192.168.0.7:~/work/m2ge  #tzc通过clone获取和lyr相同的工作树

账户@IP:工作树路径, git-clone 命令只要碰到这种格式,它就会认为该地址是符合SSH 协议的

https://github.com/fxjwind/FirstApp.git, http协议的例子

 

git pull, 将remote git库的更新同步到本地git库

经过一段时间开发, lyr和tzc的代码需要merge

lyr, 使用pull来将tzc的代码同步到本机

git pull tzc@192.168.0.5:~/work/m2ge

当然如果发生冲突, git会报错, 那么需要手工merge, 然后commit

git push, 将本地git库同步到remote git库

当如果开发的人多了, 完全依靠lyr去一个个pull, merge, 累死了, 所以提供push, 可以让每个人主动将更新提交 
这样每个人的流程如下,

 image

定义remote git库,

git remote rm origin #删除原有origin

git remote add origin url #origin,别名,后面可以用来表示remote git; url, remote git的url

git push origin master #后面orgin和master都可以不写, 是默认的, 也可选择push其他的branch

有时候,你push了错误的东西到remote库,你想删除这部分内容,
这样在本地reset,后push会报错的,Non-fast-forward
git push -f origin master

这时候需要-f, 进行force-push,不过慎用。。。

 

Git分支管理 (branch)

其实, 我觉得对应git, branch并没有那么重要, 因为每个人本地都有完整的git仓库, 可以离线开发...已经很方便

但是某些情况下,

比如需要同时支持多个产品的版本, 为了保证本地master的clean……, 这些时候我们还是需要branch的

分支创建

git branch local #创建branch local

git branch #查看当前branch的状况, *表示当前branch, 所有branch是平等的, 只是习惯性将master当作主branch 
local 
* master

git checkout local #切换branch

git branch mybranch 92c134fa01 #在特定commit上创建branch

分支合并

git checkout master # 将当前分支切换为master 
git merge local # 将local分支与当前分支合并

git branch -d local #删除分支, 只有被merge过的分支可以删除 
git branch -D local #强行删除

分支push

git push origin branch #origin为remote库的别名

cherry-pick

可以在branch, 选择merge其他branch上的commit, 很方便

git cherry-pick 38361a68 #会将38361a68开头的commit, 在当前branch上增加该commit

远程分支

git push origin <local_branch> # 创建远程分支, 名字同local 
git push origin <local_branch>:<remote_branch> # 创建远程分支, 指定不同的分支名 
git push origin :<remote_branch> #:左为空, 则删除远程分支


本文章摘自博客园,原文发布日期:2013-08-07

目录
相关文章
|
6月前
|
Linux 网络安全 开发工具
Git 详解(一)
Git 详解(一)
83 0
|
Java 开发工具 git
|
1月前
|
缓存 数据可视化 算法
GIt详解
GIt详解
|
6月前
|
存储 项目管理 开发工具
Git是什么
【4月更文挑战第17天】Git是什么
76 1
|
Linux Shell 网络安全
|
6月前
|
Linux 开发工具 git
git初识
git初识
39 0
|
网络安全 开发工具 数据安全/隐私保护
今天给大家讲一讲git
今天给大家讲一讲git
114 0
|
存储 Linux 开发工具
git相关总结大全
git相关总结大全
|
存储 Java Linux
Git 2.41 is here!
* Git 作为一个开源项目刚刚发布了 [2.41 版本](https://lore.kernel.org/git/xmqqleh3a3wm.fsf@gitster.g/ "2.41 版本"),其中共有 95 位开发者贡献了新的特性以及已有缺陷的修复,而他们中的 29 位是新的贡献者。我们上次聊到 Git 的最新发布动态是在[Git 2.40 版本](https://github.blog/202
|
存储 开发工具 git
Git(超详细)
1.Git概述 Git简介 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种: 本地仓库:开发人员自己电脑上的Git 仓库 远程仓库:远程服务器上的Git仓库