git是程序员必备技能之一,学会git,再也不怕瞎**乱改代码,再也不会忘记上次修改了什么地方,用git,快乐编程。
Git前言
Git只记录每次修改的内容,即当前提交的内容和当前的内容的差值
,这也是Git比其它版本控制系统优秀的地方。
新建仓库
这里的仓库指本地仓库,至于远程仓库的新建诸如Github,全界面操作,简单易懂,只需轻轻点几下(百度教程一大堆,不会编程的童鞋也能看懂)。
你可以新建一个目录来当作本地仓库,也可以在你已有的工程目录直接新建仓库,但是一般情况下,我们会新建一个目录。
1 |
|
执行上述命令就会在当前目录新建一个本地仓库,并且输出
1 |
|
但此时细心的你会发现,目录下什么也没有,其实它已经生成了一个.git
目录,只不过它是隐藏文件,所以现在你可能有疑问,这个.git
目录就是我们的仓库吗?它里面保存的是版本控制的相关文件,反正不要人为地去修改它,否则的话会导致你的本地仓库被破坏。
修改工作区
这里的修改包括新添加文件和修改原有文件内容。而修改文件名,会被当作一次文件删除和文件添加。
我们现在仓库中新建一个test.txt
文件,在里面写上
1 |
|
此时使用git status
来查看仓库的状态,会发现,git检测到新建文件了,但是并不知道你里面有什么内容,所以它是Untracked
状态。
使用git add test.txt
将test.txt
从提交到暂存区,此时我们再使用git status
来查看仓库的状态
1 |
|
此时说明test.txt
已经被git追踪,git检测到test.txt
是新添加的文件
我们使用git commit -m "增加一个新文件"
来将暂存区提提交到master分支。
1 |
|
此时我们再使用git status
来查看仓库的状态
1 |
|
发现当我们执行commit指令时,暂存区在提交到master分支时自身也会清空。
分支操作
- 我们可以通过
git branch
命令查看当前仓库的所有分支
当我们新建git工作区,还没进行commit操作时,我们的工作区内是没有任何branch,而我们第一次commit操作会自动创建一个master分支。
1 |
|
- 新建分支 / 切换分支
1 |
|
此时我们新建了分支branch1
并将它设置为当前分支,此时branch分支和master分支一致,此后我们就可以分别向两个分支提交更改,它们并不会相互影响(在分支合并之前),可理解为在你创建branch1
分支时,在仓库新建了一个岔路口。
- 合并分支
当你需要将
branch1
分支合并到master
分支时(比如已完成某个bug修复,或者添加新的功能测试)
**<注意>** 合并分支前,请确保已经将修改commit到仓库。注意>
1 |
|
这里可以看到我在branch1
分支添加的文件b1.txt
现在已经合并到master分支
**<注意>** 当出现合并冲突时,需要手动修改冲突部分注意>
版本回退
修改test.txt
1 |
|
然后我们再对test.txt
执行add和commit操作,这时,你突然发现上次添加的那句话不太正确,需要回退到之前的版本,当然这对于(删除某些内容)更能体现版本回退的用处。
此时你可以使用git log
命令查看你的commit记录
1 |
|
可以发现,之前的commit操作都有记录,这里回退有两种方法
git reset --hard commit-id
git reset --hard HEAD~回退的次数
在git log
输出的信息中,有一项需要我们注意commit加一长串数字,这个叫做commit id,用来唯一指示一次commit操作,我们可以凭借commit id来回退到指定版本,当然你也可以使用HEAD~回退的次数
来将HEAD指针往回移动,比如HEAD~100
就是回退到前第100次的commit操作(可能比较拗口,比如这里HEAD~1表示回退到“增加一个新文件”那次操作,因为你当前处于“测试版本回退”)
1 |
|
命令总结
新建仓库
git init
:初始化本地仓库git clone https://www.github.com/***
:克隆远程仓库
设置用户名和邮箱
git config --global user.name "Your Name"
:设置用户名git config --global user.email "email@example.com"
:设置邮箱
提交
git add .
:将工作区的文件全部提交到暂存区git add file
:将单独的文件提交到暂存区git commit -m "更新信息"
:将暂存区提交到本地仓库分支
撤销操作
git checkout -- file
:撤销在工作区上的修改,add前。git reset HEAD file
:撤销暂存区的操作,add后、commit前。git reset --hard commit-id/HEAD~回退的次数
:在commit之后又想取消本次的修改,直接进行版本回退,commit后。
同步远程分支到本地分支
git pull origin master
:将远程origin仓库的master分支下载到本地分支,并进行合并。