Git安装
Linux系统git官网下载源码安装,执行./configure , make && make install
Windows系统git安装用msysgit,从https://git-for-windows.github.io下载


1.创建版本库repository仓库
mkdir 仓库目录
通过 git init 初始化仓库命令将目录变成Git可管理的仓库。
文件放到Git仓库,通过git add ,git commit命令提交。
查看仓库工作区工作状态,git status
查看修改内容,git diff

2.版本回退和历史记录
查看历史记录,git log 显示从最近到最远的提交日志,可加git log --pretty=oneline参数
git log --pretty=oneline
Git知识学习

查看分支合并情况,历史提交的commit id:
$ git log --graph --pretty=oneline --abbrev-commit
历史版本回退,git reset --hard HEAD^ (HEAD当前版本,HEAD^上一版本)

git reset --hard commit id
Git知识学习_第1张图片

查看历史命令,git reflog可确定回到哪个版本
Git知识学习_第2张图片

3.工作区和暂存区
git add命令实际上是把文件修改添加到暂存区stage。
git commit 提交更改命令是将暂存区stage所有内容提交到当前分支,一般是master分支。Git创建版本库时会创建唯一master分支。
git commit -a 提交所有的更改。
工作区和版本库里最新版本的区别。
git diff HEAD -- git-file1.txt
Git知识学习_第3张图片

4.git撤销修改
撤销工作区的修改,git checkout -- file
撤销暂存区的修改
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,有两种情况:
一种是readme.txt自修改后还没有被放到暂存区stage,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后(add操作了),又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

5.git删除文件
git rm file,git commit 后文件file将从版本库中删除。如果误删,可用git checkout -- file命令将文件恢复到最新版本。其实质是用版本库里的版本文件替换工作区的版本。

6.从远程仓库克隆
git clone url #git clone [email protected]:root/ops-configuration.git
Git 支持多种协议:
https速度较慢
git(ssh支持)速度快

关联远程gitlab项目:
git remote add origin [email protected]:root/Joe-Project.git
将本地项目更新推送到远程gitlab中:
git push -u origin master #-u本地与远程分支关联起来union。将当前master分支推送到远程。
查看远端地址 git remote -v
Git知识学习

7.分支管理
创建一新的本地dev分支,并切换到dev分支:
$ git checkout -b dev

切换到本地master分支:
$ git checkout master

切换到远程master分支:
$ git checkout --track origin/master

查看当前分支:
$ git branch

git checkout --track origin/prepare #切换到远程prepare分支
git checkout --track -b master origin/master #基于远程分支origin/master创建本地master分支

列出当前所有分支,表当前分支。
$ git branch
Git知识学习

合并分支。git merge 命令用于合并指定分支到当前分支。

   $ git checkout master
   $ git merge dev
   $ git branch -d dev

切换到master后,将分支dev合并到当前master分支,并删除dev分支。
Git知识学习

Fast-forward指 快进模式 合并,分支合并速度快。但会丢掉分支信息。
强制禁用Fast-forward模式,merge时生成一新的commit,可在分支历史上找到分支信息。
$ git merge --no-ff -m "merge with no-ff" dev

删除本地dev分支:
$ git branch -d dev
强制删除本地dev分支:
$ git branch -D dev
删除远程release分支:
$ git branch -r . $ git branch -r -d origin release 或 $ git push --delete origin release

用git命令操作远程master分支替换release分支:

   git clone [email protected]:root/webapp.git   #从远程仓库中clone下来
   cd webapp/    #进入到目录下 
   git branch -r    #查看远程的所有分支,看release
   git push --delete origin release   或  git branch -r -d origin/release     #删除远程release分支
   git checkout -b release     #本地创建release分支
   git push origin release     #将本地release分支push到远程

到gitlab中web查看 master分支 和 release分支 ,两个分支 compare branches 一下。 master and release are the same出现。

8.分支管理策略
实际开发中,master分支非常稳定,仅用来发布新版本。干活都在dev分支上,dev合并到分支上。
bug分支管理:在新建的bug分支上修改bug,之前正在开发操作的dev分支上这个工作现场可先“储藏”起来,可用git stash命令。等bug分支修复完之后再回来到dev上继续工作。

git stash list查看刚才dev分支工作现场去哪儿?用 git stash pop 可将Git把stash内容存在某个地方的工作现场恢复。用git stash pop恢复的同时把stash的内容删除。
Git知识学习
开发一新功能feature,最好新建一分支feature分支。

列出所有本地分支和远程分支:
git branch -a

列出所有远程分支:
git branch -r

重命名分支:
git branch -m
$ git branch -m oldbranch newbranch -M用来强制重命名

在本地创建和远程分支对应的分支dev,使用git checkout -b dev origin/dev ,本地和远程的dev分支名称最好一致。
从本地推送分支dev,使用git push origin dev,如果推送失败,先用git pull抓取远程的新的提交。

9.远程仓库
从远程仓库clone时,实际是Git自动把本地的master分支和远程的master分支对应起来了。并且,远程仓库的默认名称是origin。
查看远程仓库信息:
$ git remote 或 $ git remote -v
将本地分支master推送到远程库:$ git push origin master
Git知识学习_第4张图片

10.标签tag管理
标签tag是Git的版本库的快照,实质是指向某个commit的指针。
打标签:$ git tag v1.0 或 $ git tag v1.0 commit id ##指定对某次的提交commit打tag,如不指定commit id,默认为HEAD。
Git知识学习
参数: -a指定标签名; -m文字说明

查看标签:
$ git tag

查看标签信息:
$ git show v1.0
Git知识学习_第5张图片

标签tag删除:
$ git tag -d v1.0

创建的标签只存储在本地,不会推送到远程。
将某个标签本地推送到远程:
$ git push origin v2.0
或一次性推送:
$ git push origin --tags
Git知识学习_第6张图片

如果标签tag已推送到远程仓库gitlab中,删除标签需两步:
删除本地:$ git tag -d v2.0
远程删除:$ git push origin :refs/tags/v2.0

git自定义:$ git config --global color.ui true


Git 回退示例:

Git 回退到某个版本并提交到远程代码仓库(release分支操作)
1.本地版本回退

  git pull;git branch release
  git log --pretty=oneline  #查看提交commit的历史,找到commit ID 
  git reset --hard 4c77f4b6ee4a(commit ID )

2.提交到远程代码仓库
新建temp临时分支

 git checkout -b temp
 git push origin temp:temp  #代码push到temp分支

删除分支

 git push origin --delete release  #删除远端release分支
 git branch -d release    #删除本地release分支

新建主分支

 git checkout -b release   #新建主分支并切换到 release主分支
 git push origin release    #提交主分支

删除暂存分支

 git branch -d temp
 git push origin --delete temp