Git操作
创建版本库
版本库又名仓库repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
创建一个版本库非常简单,首先选择一个合适的地方创建一个空目录:
1 | mkdir learngit |
然后通过git init
命令把这个目录变成Git可以管理的仓库
把一个文件放到Git仓库只需要两步
第一步,用命令git add
告诉Git,把文件添加到仓库:
1 | git add readme.txt |
第二步,用命令git commit
告诉Git,把文件提交到仓库:
1 | git commit -m "wrote a readme file" |
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
git status
命令可以时刻掌握仓库当前的状态git diff
命令查看具体修改内容git log
命令显示从最近到最远的提交日志git reflog
命令记录你的每一次命令
时光机穿梭
版本回退
在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,往上100个版本写写成HEAD~100
,使用git reset
命令回退版本
1 | git reset --hard HEAD^ |
指定回到未来的某个版本
1 | git reset --hard 1094a |
管理修改
git checkout -- file
可以丢弃工作区的修改:
1 | git checkout -- readme.txt |
把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
总之就是让这个文件回到最近一次git commit
或git add
时的状态
远程仓库
添加远程仓库
1 | git remote add origin git@github.com:username/repository-name.git |
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令
git push
命令把本地库的内容推送到远程,实际上是把当前分支master
推送到远程
从现在起只要本地作了提交,就可以通过命令:
1 | $ git push origin master |
把本地master
分支的最新修改推送
新建分支并切换到指定分支
1 | git checkout -b 本地分支名 origin/远程分支名 |
将本地分支推送到远程
1 | git push <远程主机名> <本地分支名>:<远程分支名> |
删除远程分支
1 | git push origin --delete remoteBranchName |
分支管理
一开始的时候,master
分支是一条线,Git用master
指向最新的提交,再用HEAD
指向master
,就能确定当前分支,以及当前分支的提交点:
每次提交,master
分支都会向前移动一步,这样,随着你不断提交,master
分支的线也越来越长
当我们创建新的分支,例如dev
时,Git新建了一个指针叫dev
,指向master
相同的提交,再把HEAD
指向dev
,就表示当前分支在dev
上:
不过从现在开始,对工作区的修改和提交就是针对dev
分支了,比如新提交一次后,dev
指针往前移动一步,而master
指针不变
首先创建dev
分支,然后切换到dev
分支:
1 | $ git checkout -b dev |
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
1 | $ git branch dev |
然后用git branch
命令查看当前分支:(会列出所有分支,当前分支前面会标一个*
号)
1 | $ git branch |
把dev
分支的工作成果合并到master
分支上:
1 | $ git merge dev |
合并完成后,就可以放心地删除dev
分支了:
1 | $ git branch -d dev |
创建并切换到新的dev
分支,可以使用:
1 | $ git switch -c dev |
直接切换到已有的master
分支,可以使用:
1 | $ git switch master |
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交
标签管理
在Git中打标签非常简单,首先,切换到需要打标签的分支上:
1 | $ git branch |
git tag <name>
就可以打一个新标签:
1 | $ git tag v1.0 |
可以用命令git tag
查看所有标签:
1 | $ git tag |