Get-Git

名词释义

版本库(Repository):

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

用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

分支:

一个版本库中可以存在多个分支,Gitc创建版本库时会为我们自动创建一个分支master。当git切换到哪一个分支的时候,你在工作区看见的就是这个分支的状态 (比如大家在开发时会在版本库里面创建几个名为dev、future、bugs的分支,当开发的时候切换到dev,程序添加新功能的时候切换到future分支,需要修复bug的时候切换到bugs分区,程序发布版本的时候切到master分支)

HEAD:

可以理解为一个指针,指向当前版本库中当前分支的最新提交记录

工作区(Working Directory):

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

暂存区

对分支的每一个操作记录在没有commit之前都会记录在暂存区

Git自定义配置

git里面一共有3个配置文件
1.版本库(Repository)级配置文件: 该文件位于当前仓库下,路径.git/.gitconfig,这个配置中的设置只对当前所在仓库有效
2.全局级(global)配置文件: cd ~即可,win7下面路径,在用户目录下,其路径为:C:\Users\username.gitconfig
3.系统(system)级配置文件: 本地git的安装目录下,例:D:\Program Files\Git\etc.gitconfig

设置命令
git config --<参数>
可选参数:
–global use global config file
–system use system config file
–local use repository config file
-f, --file use given config file
–blob read config from given blob object

设置用户名&邮箱

git config --global user.name "username"
git config --global user.email "email"

别名配置

(将一条很长很难记的命令设置成自己容易记住的命令)
格式化显示日志的别名

gitgit config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

其他命令别名

br = branch
rlg = reflog
ss = status
ch = checkout
mergeff = merge --no-ff -m
cm=commit -m
ca=commit -a

Git Quick Start

创建库

mkdir learngit
cd learngit
git init

Clone项目到本地
git clone 添加文件到暂存区
git add <file or folder>

提交暂存区的内容到分支
git commit -m ""

推送到远程版本库master分区
git push origin/master

查看

查看当前工作区状态
git status

查看工作区与暂存区状态差异
git diff

查看commit日志
git log

查看已回滚的commit日志
git reflog

查看本地分支
git branch

查看远程分支
git remote -v

查看远程分支(本地+远程)
git remote -a

查看汇总显示工作区、暂存区与HEAD的差异
git checkout
同上
git checkout HEAD

Git提交

1.先将修改的记录或新添加的文件添加到暂存区
git add (或者使用 git add -A 添加全部修改)

2.然后提交到本地分支
git commit -“提示信息”

1+2 = git commit -a "提示信息"

Git撤销

撤销工作区的修改

从指定commit点检出文件覆盖工作空间和暂存区的文件,如果不加commit-id则从暂存区检出覆盖工作区
git checkout [] – …

git checkout -- .或写作 git checkout . 这条命令最危险!会取消所有本地的 修改(相对于暂存区)。相当于用暂存区的所有文件直接覆盖本地文件

撤销添加到暂存区的记录

```git reset HEAD – ``
(将添加到暂存区的修改记录撤销到上一次状态)

撤销已commit的记录

git reset --hard <commit-id> | <HEAD> | <HEAD^>

–hard 将commit记录+工作区内容重置到某一次提交点
–hard 将commit记录重置到某一次提交点,工作区内容不变,仅回滚记录

commit-id commit的id,一个hash值,可以通过git log或者git relog查看
HEAD^ HEAD指上一次提交,HEAD^^上两次 … HEAD~100上100次

Git删除

删除工作区(删除工作区文件之后git status 会提示和版本库文件不一致,使用git checkout -- fileName能使用版本库的文件恢复工作区)
rm fileName

删除版本库文件
git rm fileName(执行之后git status 会提示在暂存区有一条delete记录)
1.这时候git commit 提交之后会将分支里面文件删除
2.如果不想删除了,使用git add fileName 能重新添加到暂存区,再commit

分支操作

查看本地分支
git branch

查看远程分支
git remote -v

查看远程分支(本地+远程)
git remote -a

创建分支(从当前分支clone)(start_point为可选,指定一个commit ID)
git branch <branchName> [<start_point>]

切换分支
git checkout

创建并切换分支
git branch -b

删除分支
git branch -d

重命名分支
git branch -m

合并分支
git branch merge

合并分支&&commit
git merge --no-ff -m “merge with no-ff”

设置同步分支
git branch --set-upstream origin/

拉取分支(前提已经设置同步分支,拉取之后可能产生冲突)
git pull

推送当前分支到远程指定分支
git push origin

小结:
查看远程库信息,使用git remote -v

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

Git标签

查看
git tag

打标签
git tag tagName
git tag -a v0.1 -m "version 0.1 released"-a指定标签名,-m指定说明文字)

查看标签信息
git show tagName

Git stash(暂存)

git stash
git stash pop
git stash list

Git 忽略文件

创建一个.gitignore文件
将不需要git trace的文件或一类文件添加到里面

比如:

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
 
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

Windows Git Bash 中文乱码

git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
export LESSCHARSET=utf-8