源代码管理的基本操作:
1.创建版本库
• sudoapt-get install git 先安装git
• 先创建目录,作为仓库
• gitinit 初始化仓库,可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了
• vim readme.txt 新建一个文本文件,比如往里面添加简单的一行字符串
• git add readme.txt 添加一个文件,比如readme.txt,如果目录里面的所有文件都要添加,可以git add *
• git commit-m "添加一个readme.txt文件" 将文件提交到仓库,并加上说明(这时候是版本1)
• 如果是第一次使用git,那么git commit可能报错,所以需要你配置一些个人信息
• git config --global user.email"you@example.com" 配置邮件
• git config --global user.name "YourName" 配置用户名
• 必须配置,否则后面的commit、push到远程库都会失败
• 然后再次git commit -m "添加一个readme.txt文件" 才会成功
2.提交修改
• 假如此时第一次修改了readme.txt文件
• git status 让我们时刻掌握仓库当前的状态。这时告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
• git diff readme.txt 查看对readme.txt做了什么修改
• git add readme.txt 提交修改和提交新文件是一样,先git add
• git status 可以再用git status查看仓库的当前状态,告诉我们,将要被提交的修改包括readme.txt
• git commit-m "第一次修改" 然后再git commit,并添加修改的描述(这时候是版本2)
• git status 可以再执行git status看仓库状态,因为所有的都提交了,Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working directory clean)的。
3.版本回退
• 可以像上面所说的那样不停的提交新的文件、提交对文件的修改
• 这时候第二次修改readme.txt文件
• git add readme.txt 先git add
• git commit -m "第二次修改" 提交第二次修改(这时候是版本3)
• git log 显示从最近到最远的提交日志,具体显示的内容自己试一试看看
• git log --pretty=oneline 如果嫌输出信息太多,看得眼花缭乱,试试加上--pretty=oneline参数
• 看这篇教程去理解为什么Git的版本号要这么长,Git的版本号类似:3628164fb26d48395383f8f31179f24e0882e1e0这样的特别长的十六进制数。
• git reset --hard HEAD^ 会回退到上一个版本,也就是从版本3回退到版本2
• 在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
• vim readme.txt 可以看到此时的readme.txt文件就是版本2时候的内容,回退成功!
• git log 此时看到版本3的信息没有了
• git reset --hard 3628164 通过命令行上的历史信息
• vim readme.txt 看到的是第三版本的readme.txt文件的内容,所以又回来了
4.工作区、版本库和暂存区
工作区:就是在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的
i. 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
ii. 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
5.管理修改
• vim readme.txt 编辑文件,比如添加新的一行
• git add readme.txt 添加,但是不提交
• vim readme.txt 再编辑文件,比如再添加一行
• git commit -m "修改两次,添一次,提交一次" 提交
• git status 看到的效果是:只提交了第一次的修改,第二次的修改没有提交
那怎么提交第二次修改,可以继续git add再git commit,也可以先git add第二次修改,再git commit,也就是第一次修改 -> git add -> 第二次修改 -> git add -> gitcommit,就相当于把两次修改合并后一块提交了。
6.撤销修改
第一种情况
• 修改了readme.txt文件,还没有git add 和git commit
• 但是在你提交之前发现这次修改有问题。既然错误发现得很及时,就可以很容易地纠正它。你可以手动把文件恢复到上一个版本的状态。
• git checkout -- readme.txt 也可以通过命令撤销修改,这条命令的意思就是,把readme.txt文件在工作区的修改全部撤销
• 无论是文件修改后值存在于工作区还没有放到暂存区,还是已经添加到暂存区,总之这个命令就是让这个文件回到最近一次git commit或git add时的状态。
• 查看文件,内容果然复原了。git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
第二种情况
• 修改了readme.txt文件,而且执行了git add readme.txt
• 庆幸的是你在 git commit 之前发现了这个问题
• git status 查看一下,修改只是添加到了暂存区,还没有提交
• git reset HEAD readme.txt 可以把暂存区的修改撤销掉,重新放回工作区。git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
• git status 查看一下,现在暂存区是干净的,工作区有修改
• git checkout -- readme.txt 还记得第一种情况中如何丢弃工作区的修改吧
7.删除文件
在Git中,删除也是一个修改操作
• 添加一个新的文件 test.txt
• git add test.txt
• git commit test.txt -m "再次新增一个文件"
• 一般情况下,通常会在文件管理器中把没用的文件删除,或者直接rm test.txt
• git status 这个时候,Git知道删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉哪些文件被删除了
• 现在有两个选择,一是确实从版本库中删除该文件,那就git rm test.txt,然后git commit 文件就从版本库中删除了
• 另一种情况是删除错了,因为版本库里还有,所以可以轻松地将误删除的文件恢复到最新版本git checkout -- test.txtgit checkout其实使用版本库中的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原“。
下面是我们组上手操作的实验过程截图:
- 首先 start a project
- 建立 blockChain
- 组队
- cmd 下 打开 git
- 输入 新建文件夹:new project 的路径
- 配置 用户名、邮箱
- 将本地电脑中的项目 与 github 进行关联,生效
- 组员 获取组长项目
- 组员 通过 fork,对文件进行修改
- 组员 通过 create pull request 发起修改申请
- 组长 查看pull request,并通过 merge pull request 决定是否同意修改组员的申请。