git简明教程
Posted 云旗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git简明教程相关的知识,希望对你有一定的参考价值。
史上最简单的GIT简明教程 -------------------------------------------------------------------------------------------- date:20140716 created by jesse system_os:CentOS 6.2x64 git url https://www.kernel.org/pub/software/scm/git/ http://git-scm.com/downloads 支持的协议: git:// http:// https:// [email protected]:/path.git -------------------------------------------------------------------------------------------- 1:git安装 #yum安装 yum install -y git #设置GIT 以便进行用户修改跟踪 以及结果显示色彩 git config --global user.name "zhangluya" git config --global user.email "[email protected]" #git config --global color.ui true git 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" #查看已经做的全局配置 git config --list 源码包安装方式: wget https://www.kernel.org/pub/software/scm/git/git-2.0.1.tar.gz yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc* perl perl-devel tar zvfx git-2.0.1.tar.gz cd git-2.0.1 make prefix=/usr/local/git all make prefix=/usr/local/git install cd .. 2.创建版本库 mkdir git cd git/ git init #添加并提交文件 -m 后面写说明 -a参数可以直接编辑 git add readme.txt git commit -m "git init v1.0" 3.如果git status告诉你有文件被修改过,用git diff可以查看修改内容 [[email protected] git]# git diff readme.txt diff --git a/readme.txt b/readme.txt index 45e6e5c..274860d 100644 --- a/readme.txt +++ b/readme.txt @@ -1,2 +1,3 @@ git init v1.0 2014-07-17 17:27 git add 2 files v1.1 +git diff test v1.3 4:版本回退 在Git中,用HEAD表示当前版本,也就是最新的提交. 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100. Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向需要回退的版本: #回退到上个版本 [[email protected] git]# git reset --hard HEAD^ HEAD is now at 8261d99 readme.txt add a line #查看确认 已经回退到上个版本了 git log也看不到上条信息了 [[email protected] git]# git log --pretty=oneline 8261d99402702e3b6c9e7a54a9fba2b8781ebe9a readme.txt add a line a41a9c889f8a5450953675acf21274700965e803 add 2 files 62de30a512766147733ebc2cee235384c4862e65 git init v1.0 [[email protected] git]# cat readme.txt git init v1.0 2014-07-17 17:27 git add 2 files v1.1 如果后悔了 还想回退到之前的版本: 只要记得之前的commit id即可回退回去 [[email protected] git]# git reset --hard fe5f6e8 HEAD is now at fe5f6e8 git diff test #git log 查看提交信息 [[email protected] git]# git log --pretty=oneline fe5f6e8187e4c6b579e7d9af6c46bc1e43be098b git diff test 8261d99402702e3b6c9e7a54a9fba2b8781ebe9a readme.txt add a line a41a9c889f8a5450953675acf21274700965e803 add 2 files 62de30a512766147733ebc2cee235384c4862e65 git init v1.0 #已经回退回去了 [[email protected] git]# cat readme.txt git init v1.0 2014-07-17 17:27 git add 2 files v1.1 git diff test v1.3 #git reflog查看命令历史 [[email protected] git]# git reflog fe5f6e8 [email protected]{0}: fe5f6e8: updating HEAD a41a9c8 [email protected]{1}: a41a9c8: updating HEAD fe5f6e8 [email protected]{2}: fe5f6e8: updating HEAD 8261d99 [email protected]{3}: HEAD^: updating HEAD fe5f6e8 [email protected]{4}: commit: git diff test 8261d99 [email protected]{5}: commit: readme.txt add a line a41a9c8 [email protected]{6}: commit: add 2 files 62de30a [email protected]{7}: commit (initial): git init v1.0 5:工作区和暂存区 我们把文件往Git版本库里添加的时候,是分两步执行的: 第一步是用"git add"把文件添加进去,实际上就是把文件修改添加到暂存区; 第二步是用"git commit"提交更改,实际上就是把暂存区的所有内容提交到当前分支; 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,commit就是往master分支上提交更改. 可以简单理解为,需要提交的文件修改通通放到暂存区,然后一次性提交暂存区的所有修改. #查看工作区和版本库里的差别: [[email protected] git]# git diff HEAD readme.txt diff --git a/readme.txt b/readme.txt index 274860d..e97e868 100644 --- a/readme.txt +++ b/readme.txt @@ -1,3 +1,4 @@ git init v1.0 2014-07-17 17:27 git add 2 files v1.1 git diff test v1.3 +git HEAD diff -- readme.txt 6:撤销修改和删除 #撤销修改 中间是 -- 这个不要忘记 撤销修改的是未提交到暂存区之前的 git checkout -- readme.txt #删除文件从版本库中 git rm file.txt git commit -m "remove file.txt" #删除完后想要撤销回来 [[email protected] git]# git reflog e201e55 [email protected]{0}: commit: remove 1.txt fe5f6e8 [email protected]{1}: fe5f6e8: updating HEAD [[email protected] git]# git reset --hard e201e55 HEAD is now at e201e55 remove 1.txt 7远程仓库: git remote add origin [email protected]:jesse/git.git git push -u origin master #第一次提交时使用-u参数 由于远程库是空的,第一次推送master分支加上了-u参数,Git不但会把本地的master分支内容推送 的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者 拉取时就可以简化命令. #以后操作简化如下 git push origin master 远程克隆: git clone [email protected]:jesse/git.git 8:分支管理 git checkout -b dev_01 #创建并切换到开发分支 #相当于如下操作 git branch dev_01 #创建分支 git checkout dev_01 #切换分支 git branch命令会列出所有分支,当前分支前面会标一个*号. #合并分支 git checkout master #切换到主分支 git merge dev_01 #将开发分子和合并到master分支 #删除分支: git branch -d dev_01 #解决冲突 [[email protected] git]# vi readme.txt <<<<<<< HEAD #当前分支 git merge test 1 ======= git merge test #开发分支 >>>>>>> dev_01 git add branch dev_01 test git init v1.0 2014-07-17 17:27 git add 2 files v1.1 git diff test v1.3 此处收工合并冲突后默认认为已经处理最好是修改成和两边一直 然后互相merge下 #带参数的分支查看情况 [[email protected] git]# git log --graph --pretty=oneline --abbrev-commit * 63e2c04 remove git merge test 1 |\ | * 9da0c9f git merge test * | bc5e9e3 merge test 1 master |/ * eeba8b3 git add branch dev_01 test * fe5f6e8 git diff test * 8261d99 readme.txt add a line * a41a9c8 add 2 files * 62de30a git init v1.0 #--no-ff 模式的merge git log可以看到相关的更新 git merge --no-ff -m "merge with --no-ff master" dev_01 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支, 能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并. 8:BUG分支管理 #暂时将工作区和暂存区冷藏起来 [[email protected] git]# git stash Saved working directory and index state WIP on dev_01: ff993b6 merge with no-ff HEAD is now at ff993b6 merge with no-ff #查看冷藏起来的都有哪些 [[email protected] git]# git stash list [email protected]{0}: WIP on dev_01: ff993b6 merge with no-ff #恢复冷藏文件 git stash apply [email protected]{0} #恢复之后不删除 git stash pop #恢复的同时并删除 #删除冷藏列表: git stash drop #如果要丢弃一个没有被合并过的分支,可以通过 git branch -D name 强行删除 #查看远程库信息 git remote -v #推送分支 git push orign master 9:标签管理 git tag v1.0 #给当前提交打便签 git tag v1.1 jds7s8s #针对指定commit id 打标签 git tag #查看所有标签 git show v1.0 #查看标签信息 还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字 git tag -a v0.1 -m "version 0.1 released" 3628164 还可以通过-s用私钥签名一个标签 一般不用 git tag -s v0.2 -m "signed version 0.2 released" fec145a 删除标签: git tag -d v1.0 因为创建的标签都只存储在本地 不会自动推送到远程所以,打错的标签可以在本地安全删除. 如果要推送某个标签到远程,使用命令git push origin tagname: #一次性推送全部尚未推送到远程的本地标签: git push origin --tags #如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除: git tag -d v0.9 Deleted tag ‘v0.9‘ (was 6224937) 然后,从远程删除。删除命令也是push,但是格式如下: git push origin :refs/tags/v0.9 To [email protected]:jesse/learngit.git - [deleted] v0.9 忽略特殊文件: .gitignore 别名设置: git config --global alias.st status git config --global alias.co checkout git config --global alias.ci commit git config --global alias.br branch git服务器搭建简化步骤: yum install -y git useradd git mkidr git && cd git git init --bare sample.git chown -R git:git sample.git 修改git 登陆shell为 git:x:500:500::/home/git:/usr/bin/git-shell [[email protected] git_learn]# git log --pretty=oneline #结果在一行显示 10e7ef93646c14e8e9c218895690a8fea9eaa3b5 add git test 671b3e7e242c1706a7e6662f8ee5edbf51e25b40 add distributed 1493e1dfec607f82842f3f17fb82593c80d24c6a commit b.txt e1dea08907276d2e89e6ff856bf769388d9c5883 add a git.txt by zhangluya 在Git中,用HEAD表示当前版本,也就是最新的提交“3628164...882e1e0”(注意我的提交ID和你的肯定不一样), 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100. [[email protected] git_learn]# cat git.txt git test git is a free software! git is a distributed version console system! [[email protected] git_learn]# git reset --hard HEAD^ #回退到上个版本 HEAD is now at 671b3e7 add distributed [[email protected] git_learn]# cat git.txt git is a free software! git is a distributed version console system! 假设回退错误,还想回退到最近更新的版本: [[email protected] git_learn]# git reset --hard 10e7ef HEAD is now at 10e7ef9 add git test [[email protected] git_learn]# cat git.txt git test git is a free software! git is a distributed version console system! [[email protected] git_learn]# git log --pretty=oneline 10e7ef93646c14e8e9c218895690a8fea9eaa3b5 add git test 671b3e7e242c1706a7e6662f8ee5edbf51e25b40 add distributed 1493e1dfec607f82842f3f17fb82593c80d24c6a commit b.txt e1dea08907276d2e89e6ff856bf769388d9c5883 add a git.txt by zhangluya [[email protected] git_learn]# git reflog #每次提交记录 10e7ef9 [email protected]{0}: 10e7ef: updating HEAD 671b3e7 [email protected]{1}: HEAD^: updating HEAD 10e7ef9 [email protected]{2}: commit: add git test 671b3e7 [email protected]{3}: commit: add distributed 1493e1d [email protected]{4}: commit: commit b.txt e1dea08 [email protected]{5}: commit (initial): add a git.txt git checkout -- file可以丢弃工作区的修改: --和file之间要有空格 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况: 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 总之,就是让这个文件回到最近一次git commit或git add时的状态。 git文件删除: git rm filename git commit -m "delete file" 误删除要撤销没提交之前可以这么做: 使用:git checkout -- filename 关联远程git库: git remote add origin [email protected]:zhangluya1987/git_learn.git 请千万注意,把上面的zhangluya替换成你自己的GitHub账户名,否则, 你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推 不上去的,因为你的SSH Key公钥不在我的账户列表中. 添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的, 但是origin这个名字一看就知道是远程库。下一步,就可以把本地库的所有 内容推送到远程库上: git remote add origin [email protected]:zhangluya1987/git_learn.git git push -u origin master #第一次加 -u 由于远程库是空的,我们第一次推送master分支时,加上了-u参数, Git不但会把本地的master分支内容推送的远程新的master分支,还 会把本地的master分支和远程的master分支关联起来,在以后的推 送或者拉取时就可以简化命令。 -------------------------------------------------------------------------- touch README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/zhangluya1987/git_learn.git git push -u origin master Push an existing repository from the command line git remote add origin https://github.com/zhangluya1987/git_learn.git git push -u origin master 克隆远程代码库: git clone [email protected]:zhangluya1987/git_learn.git 创建分支与合并分支: 首先,我们创建dev分支,然后切换到dev分支: git checkout -b dev_git git checkout命令加上-b参数表示创建并切换,相当于以下两条命令: git branch dev git checkout dev 用git branch命令查看当前分支: git branch * dev master git branch命令会列出所有分支,当前分支前面会标一个*号。 然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行: Creating a new branch is quick. 然后提交: git add readme.txt git commit -m "branch test" [dev fec145a] branch test 现在,dev分支的工作完成,我们就可以切换回master分支: git checkout master 合并分支:将dev_git分支合并到master分支 git merge dev_git 删除开发分支: git branch -d dev_git 查看分支:git branch 创建分支:git branch name 切换分支:git checkout name 创建+切换分支:git checkout -b name 合并某分支到当前分支:git merge name 删除分支:git branch -d name 解决冲突: 删除分支冲突部分 git log --graph #查看所有分支 准备合并dev分支,请注意--no-ff参数,表示禁用“Fast forward”: $ git merge --no-ff -m "merge with no-ff" dev
以上是关于git简明教程的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
VSCode自定义代码片段15——git命令操作一个完整流程
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段