git 基础知识分享
使用 git 作为版本控制系统,首先要理解什么是一个版本:每当进行一次 commit
操作时,Git 会保存一个提交对象(commit object),可以理解这个提交对象就包含了这次改动的内容快照,根据不同提交对象的 commit id
,可以随时访问不同版本的内容。
一.从git库拉取代码到本地运行
在从git库拉取代码前,我们需要进行用户信息的配置。
Git
的所有配置使用git config
命令来完成,而用户信息只需要配置user.name
和user.email
即可,
- 配置用户名:git config --global user.name '你的用户名'
- 配置邮箱:git config --global user.email '你的邮箱'
上面的命令使用了 --global全局配置的方法,当然,我们可以使用 --local和–system来指定配置等级
参数 | 说明 |
---|---|
--global | 全局有效 |
--system | 对当前所有登录的用户有效 |
--local | 对当前版本库有效 |
三个参数的优先级 --local > --system > --global。
配置完数据之后,便可以开始从git库拉取代码。
1.git init 和 git clone
我们通过git init
命令在本地初始化一个版本库,一种这种称为裸库,创建完裸库之后,我们可以通过 git remote add origin sshURL 来将本地库和git库进行连接,但这种方法需要在git仓库中添加ssh密钥。
而有时候,我们会直接通过 git clone httpURL
命令将远程的版本库克隆到本地,通过这种方式,我们可以将远程版本库中项目克隆到本地,当我们参与一些老的项目时,一般就是采用这种方式来创建本地的版本库。
2.git pull
git pull 命令为从当前分支拉取代码,当然,你也可以通过 git pull origin 分支 命令在该分支上拉取其他分支的代码。
在上面我们将裸库和git库连接以后,我们便可以使用git pull 来拉取代码了。
二.分支的创建与切换
1.git branch ,git checkout和git merge
- git branch 命令为查看本地的分支。
- git branch 分支名 命令为在本地创建一个新的分支。
- git branch -d 分支名 命令为删除该分支,若使用 D 则为强制删除该分支。
- git checkout 分支名 命令为检出该分支。
- git checkout -b 分支名 命令为创建并检出该分支。
- 假如当我们想把其他分支合并到master身上时,我们需要先将分支切换至master ,并使用 git merge 分支名 将该分支合并到master上。
2.创建分支和切换分支的详细信息
在开发过程中,一般都是在分支上进行代码的编写,然后合并到master上,分支本质上仅仅是指向提交对象的可变指针,当我们新创建一个分支时,其实就是新建了一个指针,指向了当前的版本。
那么git 怎么知道我们处在哪个分支?
这是因为有一个特殊的指针 HEAD
,它指向当前所在的本地分支。
而当我们切换我们的分支时,实际上是切换HEAD指针的指向。
当我们在新的分支提交时,我们的分支将会和master分支分道扬镳。
而这里的HEAD指针,是管理版本是非常重要的。
三.将更改提交到分支
1. git status, git add ,git commit ,git push
- git status 命令可以检查当前工作目录的状态,并提示用户接下来应该进行什么操作。
- git add <file> 命令可以将工作区更改的文件添加到暂存区,其中 git add . 是将所有的更改的文件添加到暂存区的命令。
- git commit 命令会将暂存区的内容提交到版本库中,但此时提交过去的文件并没有更新到分支里。-m 后面表示的是提示说明。
- git push 命令会将已经提交到版本库的文件更新到分支上,到这一步,更新的文件才真正的提交到了git库中。
2.关于提交和撤销的细节
我们都知道,在分支没有新的提交的情况下,提交更改这个过程分为三步:git add <file> ——>git commit -m 描述性文字 ——> git push.。
这一过程主要涉及到了三个分区:工作区,暂存区,版本库。
git 通过比较这三个区的内容,来告诉使用者应该进行什么操作。
git 撤销提交
git关于撤销提交的命令总共有三个:git reset --soft commit_id ,git reset --mixed commmit_id ,git reset --hard commit_id;
这三个命令的撤销强度依次增强。其中的commit_id 可以在commit中查找到,当然也可使用HEAD表示撤销到前一个版本。
git reset --soft commit_id
当我们需要继续修改但又不想进行一个新的提交时可以使用该指令,该指令会将提交到版本库的内容撤回到暂存库中。此时我们可以继续修改文件,并将修改后的内容add和commit,与撤回的内容
git reset --mixed commmit_id
当发现提交的内容里出了问题,需要把问题部分修改时可以使用该指令,该指令会将提交到版本库的内容撤回到工作区中。这样我们就可以在工作区重新更改并进行提交
git reset --hard commit_id
当我们觉得整个提交都没有用时,我们可以使用此命令将提交直接撤回到上一个版本的提交。
当然,上述的命令不仅仅对已经提交到版本库的版本使用,假如你把更改提交到了暂存区,但有发现这些提交有错误时,可以通过第二个或者第三个命令将这些提交撤回,这很是有用。
然而当我们撤回这些提交时,我们会发现,版本库里还是有这些提交的内容,此时我们可以使用 (git push -f origin 分支名) 这个命令来去掉那些提交。