======Git使用记录======
这个是比较完整的教程,讲解比较透彻:[[https://git-scm.com/book/zh-tw/v1|Pro Git]]
这个是廖雪峰的教程,深入简出:[[https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000|廖雪峰的Git教程]]
下面是几个重点特性:
* Git是分布式版本控制系统
* Linus创建了Git工具
* 2008年Github上线
=====基本概念=====
{{:wiki:git1.jpeg|}}
add是把修改放入暂存区,commit是把暂存区的内容进行提交。\\
第一次修改 -> git add -> 第二次修改 -> git commit\\
第二次修改不会被提交。\\
====工作区(Working Directory)====
本地电脑上的目录,就是我们的工作区。
====仓库(Repository)====
工作区目录中有一个名为.git的目录,这个目录就是Git仓库。
====暂存区(Stage)====
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
=====常用命令=====
====创建仓库====
$ mkdir ethdoc_cn
$ cd ethdoc_cn
$ pwd
/root/tempPangXie/ethdoc_cn
$ git init
Initialized empty Git repository in /root/tempPangXie/ethdoc_cn/.git/
====创建仓库并关联远程GitHub====
Let us say 'yourWebApp' is the folder you have your local web app. Change it to the directory
cd 'yourWebApp'
#Init git in the folder
git init
#Now add your github url as a remote
git remote add origin git@second.github.com:hsw625728/mengyoutu.git
#Here origin is the short name for your url
#Now pull the read me file from the github repo
git pull origin master
#Now push your web app to the github repository
git push origin master
#Here it is assumed that you are in your master, the default branch
====切换远程仓库====
$ git remote rm origin
$ git remote add origin
====添加文件到仓库====
$ git add readme.txt
====提交修改到仓库====
$ git add readme.txt
$ git commit -m "添加readme.txt"
1 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 readme.txt
====查看仓库状态====
$ git status
====查看修改内容====
$ git diff
====产看日志====
$ git log
$ git log --pretty=oneline
411b851fab7dc122f9b815ef04ba7d8e24ac5fae 添加第四行
09d5cfe7237297b205a0b6d6cbabeb0156d90ac9 添加readme.txt
====版本回滚====
$ git reset --hard 09d5cfe7
HEAD is now at 09d5cfe 添加readme.txt
====Git命令历史记录====
$ git reflog
09d5cfe HEAD@{0}: 09d5cfe7: updating HEAD
411b851 HEAD@{1}: commit: 添加第四行
====撤销修改====
$ git checkout -- readme.txt
命令git ''checkout -- readme.txt''意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:\\
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;\\
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。\\
总之,就是让这个文件回到最近一次''git commit''或''git add''时的状态。
====删除文件====
$ git rm
$ git commit -m "删除了文件"
====创建与合并分支====
创建并切换分支
$ git checkout -b
Switched to a new branch 'name'
相当于如下两条命令
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
====查看分支信息====
$ git branch
* dev
master
====切换分支====
$ git checkout master
Switched to branch 'master'
====dev分支合并到master分支====
$ git merge dev
====删除分支====
$ git branch -d
====删除远程分支====
$ git push origin --delete
====查看远程分支====
git branch -r
====拉取远程分支并创建本地分支====
方法一
git checkout -b 本地分支名x origin/远程分支名x
#使用该方式会在本地新建分支x,并自动切换到该本地分支x。
#采用此种方法建立的本地分支会和远程分支建立映射关系。
方式二
git fetch origin 远程分支名x:本地分支名x
#使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
#采用此种方法建立的本地分支不会和远程分支建立映射关系。
#需要使用下面的命令手动建立映射关系
git branch -u origin/addFile
====查询当前远程的版本====
$ git remote -v
#获取最新代码到本地(本地当前分支为[branch],获取的远端的分支为[origin/branch])
$ git fetch origin master [示例1:获取远端的origin/master分支]
$ git fetch origin dev [示例2:获取远端的origin/dev分支]
====查看版本差异====
$ git log -p master..origin/master [示例1:查看本地master与远端origin/master的版本差异]
$ git log -p dev..origin/dev [示例2:查看本地dev与远端origin/dev的版本差异]
====合并最新代码到本地分支====
$ git merge origin/master [示例1:合并远端分支origin/master到当前分支]
$ git merge origin/dev [示例2:合并远端分支origin/dev到当前分支]
====创建TAG=====
$ git tag -a v1.1.0 -m 'v1.1.0审核版本'
$ git show v1.1.0
$ git push origin v1.1.0
====本地分支推送到远端=====
$ git push origin pangxie-mobile:pangxie-mobile
====暂时存储stash====
#暂存现在的修改
$ git stash
#查看现有的暂存stash
$ git stash list
#恢复一个暂存头部版本(恢复但不删除)
$ git stash apply
#恢复一个暂存头部版本(恢复同时删除)
$ git stash pop
====分支代码强制覆盖master====
#切换到develop分支下,并保证本地已经同步了远端develop的最新代码。
$ git checkout develop
$ git pull
#把本地的develop分支强制(-f)推送到远端master。
$ git push origin develop:master -f
#切换到旧分支master。
$ git checkout master
#下载远程仓库最新内容,不做合并。
$ git fetch --all
#把HEAD指向master最新版本。
$ git reset --hard origin/master
====回滚master====
$ git reset --hard 297ff2dcf20605297684f296a4b4ccaa1cf4dc48
$ git push -f origin master
====文件修改历史====
git log --pretty=oneline 文件名
git show 356f6def9d3fb7f3b9032ff5aa4b9110d4cca87e