======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