5.1 GIT

Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

1、git基本操作

创建版本库、把文件添加到仓库、把文件提交到仓库 基本命令:

git init
git add xxx
git commit -m '注释'
git commit -a -m '注释'
git reflog
git status
git diff

1.1 创建版本库

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

1.2 把文件添加到仓库

git add readme.txt              #添加单个文件
git add file2.txt file3.txt       #添加多个文件
git add dir                        #添加目录
git add .                         #添加所有文件

2 时光机穿梭

版本回退、工作区和暂存区、管理修改、撤销修改、删除文件 基本命令:

git reset --hard HEAD^
git reset --hard 版本号

2.1 版本回退

git log                         #日志
git log --pretty=oneline        #格式显示日志
git reset --hard HEAD^             #回退上一版本
git reset --hard 1094a            #回退到指定版本
git reflog                         #操作命令记录

注意:HEAD指当前版本

2.2 工作区和暂存区

工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:

版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

2.3 管理修改

git diff HEAD -- <file>    #命令可以查看工作区和版本库里面最新版本的区别

2.4 撤销修改

git checkout -- .
git checkout -- <file>    #丢弃工作区的修改
git reset HEAD <file>   #撤销暂存区(相当于进行了git add后退一步)

2.5 删除文件

git rm -rf b.php
=
rm -rf b.php
git add b.php

3、分支管理

创建与合并分支、解决冲突、分支管理策略、Bug分支、Feature分支、多人协作、Rebase

基本命令:

git checkout -b dev
git branch dev
git checkout dev
git branch
git branch -d dev    (未合并不能删除)
git branch -D dev    (未合并强制删除)

3.1 创建与合并分支

git branch                    #查看分支
git checkout -b dev         #创建dev并切换到dev分支
git branch dev                #创建dev分支
git checkout dev            #切换到dev分支
git branch -d dev            #删除分支
git branch -v                #显示现在的所有分支信息
git merge <name>            #合并分支

3.2 解决冲突

git log --graph --pretty=oneline --abbrev-commit    #查看分支的合并情况
git log --graph                                        #查看分支合并图
- 创建dev分支并且换到dev分支
- 修改文件
- 切换主分支
- 主分支修改(导致冲突)
- 合并dev分支(产生冲突)
- 查看冲突文件(git status)
- 修改冲突文件
- 添加&&提交

git config receive.denyCurrentBranch ignore

3.3 分支管理策略

git log --graph --pretty=oneline --abbrev-commit    #查看分支的合并情况
git log --graph                                        #查看分支合并图

git merge --no-ff -m "merge with no-ff" dev            #禁用Fast forward模式,并在merge是生成一个新的commit

3.4 Bug分支

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:

- 当前在dev分支上
- git checkout dev               #(然后处理需求)
- git stash                        # 冻结储藏修改
- git checkout master
- git checkout -b issue-101     #(创建bug分支,修改处理bug)
- git checkout master
- git merge --no-ff -m "merged bug fix 101" issue-101 (合并bug)
- git checkout dev                #回到dev分支
- git stash list                #贮存列表
- git stash apply <stash@{0}>   #恢复到指定存贮(不删除stash)
- git stash drop <stash@{0}>    #删除指定存贮
- git stash pop    <stash@{0}>        #恢复到指定存贮并删除

3.5 多人协作

- git remote                #查看远程库的信息
- git remote -v                #查看远程库的信息(详细)
- git clone git@github.com:michaelliao/learngit.git
- git push origin master     #推送到远程主分支

git config receive.denyCurrentBranch ignore //解决无权限问题

3.6 Rebase

多人在同一个分支上协作时,很容易出现冲突。即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功。

- git rebase            #变基
- git push

3、标签管理

创建版本库、把文件添加到仓库、把文件提交到仓库 基本命令:

git tag
git tag v1.0
git tag v0.9 f52c633
git log --pretty=oneline --abbrev-commit
git show v0.9
git tag -a v0.1 -m "version 0.1 released" 1094adb
git tag -d v0.1

3.1 创建标签

git tag                                                    #查看标签
git tag v1.0                                             #创建标签
git tag v0.9 f52c633                                    #在某版本上创建标签
git log --pretty=oneline --abbrev-commit                #格式化显示日志
git show v0.9                                             #显示标签
git tag -a v0.1 -m "version 0.1 released" 1094adb        #创建带有备注标签

3.2 操作标签

git tag -d v0.1                   #删除标签
git push origin v1.0            #推送标签到远程
git push origin --tags             #推送所有标签

#删除远程标签
git tag -d v0.9
git push origin :refs/tags/v0.9

4、自定义Git

忽略特殊文件、配置别名、搭建Git服务器 基本命令:

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

4.1 忽略特殊文件

不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

4.2 配置别名

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit                    #git ci -m "bala bala bala..."
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'

4.3 搭建Git服务器

adduser git
git init --bare sample.git
chown -R git:git sample.git
git:x:1001:1001:,,,:/home/git:/bin/bash ->  git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
git clone git@server:/srv/sample.git
git clone ssh://git@120.78.129.166:22/data/gitrepos/blog.git

克隆远程代码

cd myproject
git init
git add .
git commit -m 'initial commit'
git remote add origin git@gitserver:/opt/git/project.git
git push origin master
git clone git@gitserver:/opt/git/project.git myproject
git clone http://git.ilovehai.com/blog.git

5 git rm与git rm --cached

5.1 当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用

git rm file_path

当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 可以使用

5.2 git rm --cached file_path

file_path 为文件路径

results matching ""

    No results matching ""

    results matching ""

      No results matching ""