GIT

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

安装

命令行输入git先看系统有没有已经安装。
linux:

1
sudo apt-get install git

windows
下载可执行文件
官网下载地址

安装好后设置

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

基本命令

初始化一个Git仓库:
git init

添加文件到Git仓库,分两步:
1.把文件修改添加到暂存区:
git add filename
2.暂存区的所有内容提交到当前分支:
git commit -m “message”

查看仓库当前的状态:
git status

查看具体修改了的内容:
git diff filename

查看版本记录:
详细:
git log
简略:
git log –pretty=oneline
SHA1计算出来的一串数字是commit id(版本号)

版本回退:
git reset
在Git中,用HEAD表示当前版本。
上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写成HEAD~100
回退到上一个版本:
git reset –hard HEAD^
回退到指定版本:
git reset –hard commit_id(没必要写全,前几位)

查看命令记录:
git reflog
(可用于找commit id)

撤回修改:
1.文件已修改,未add到暂存区:
git checkout – filename
2.文件已修改,并add到暂存区,未commit:
git reset HEAD filename
git checkout – filename

git reset –hard HEAD

从版本库中删除文件:
git rm filename(不仅删除了文件,而且还添加到了暂存区)
git commit -m “message”

本地删错文件了,恢复:
git checkout – filename
(git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除)

在本地关联远程库:
git remote add origin git@github.com:xxx/xxx.git
添加后,远程库的名字就是origin

把本地库的内容推送到远程:
git push

git push -u origin master
远程库如果是空的,我们第一次推送master分支,加上-u参数,
Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,
在以后的推送或者拉取时就可以简化命令:
git push origin master

从远程库拉取最新的内容:
git pull

从远程库克隆:
git clone git@github.com:xxx/xxx.git

查看分支:
git branch

创建分支:
git branch branchname

切换分支:
git checkout branchname

创建+切换分支:
git checkout -b branchname

在本地创建和远程分支对应的分支:
git checkout -b branchname origin/branchname

建立本地分支和远程分支的关联:
git branch –set-upstream-to origin/branchname branchname

合并某分支到当前分支:
git merge branchname
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

–no-ff: 强制禁用Fast forward模式,
Git就会在merge时生成一个新的commit,
从分支历史上就可以看出分支信息。
git merge –no-ff -m “message” branchname。

删除分支:
git branch -d branchname
删除本地分支后,同步到远程:
git push origin branchname 删除远程分支branchname

解决冲突:
把Git合并失败的文件手动编辑为我们希望的内容,再提交。

工作做到一半要去做别的分支,保存现场:
git stash
然后,用git status查看工作区,就是干净的(除非有没有被Git管理的文件)。

恢复现场:
查看:
git stash list
恢复方法一:
git stash apply(恢复后,stash内容并不删除)
git stash apply stash@{0} (恢复指定stash)
git stash drop (删除)
恢复方法二:
git stash pop (同时删除drop)

丢弃一个没有被合并过的分支:
git branch -D branchname

查看远程库
git remote
git remote -v (详细信息)

把本地未push的分叉提交历史整理成直线:
(目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比)
git rebase

查看标签:
git tag 查看所有标签
git show tagname 查看标签信息等具体内容

新建标签:
(标签基于commit,创建的标签都只存储在本地,不会自动推送到远程。)
git tag tagname 用于新建一个标签,默认commit为HEAD。
git tag -a tagname -m “message” 可以指定标签信息,默认commit为HEAD。
git tag tagname commit_id 给对应commit打标签

删除标签:
git tag -d tagname

推送标签到远程:
git push origin tagname 推送指定标签
git push origin –tags 推送所有标签

删除远程标签:
1.git tag -d tagname 先删除本地标签
2.git push origin :refs/tags/tagname 删除远程标签

忽略特殊文件:
编写.gitignore文件
example
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理。