Git和版本控制

git版本控制—从安装到应用

2018-12-09  本文已影响19人  aasdfghjkll

前几天想把Android Studio上的代码发布到github,以为很简单的步骤,愣是出现很多错误,所以打算好好学习一下gitO(∩_∩)O,以下是慕课网上课程的学习笔记:

1.初识git

git创始人:Linus Torvalds(也是创造Linux这个开源操作系统的大牛Σ(っ °Д °;)っ)
git是一个分布式的版本管理工具,不同于集中式的需要联网操作,它可以在线下开发,也可以联网操作。
版本控制:可以有效记录每次修改代码的变化,同时可以回滚
学习git的重要性:版本控制解决多人协作的问题,提高开发效率

2.git安装与创建git仓库

  1. 下载
    如果下载过程中遇到The setup files are corrupted Please obtain a new copy of the program错误,换一个下载网站试试(/≧▽≦)/
  2. 安装
    初学时安装过程中按照默认配置进行安装即可
  3. 配置用户信息
    因为git是分布式版本控制,所以需要配置用户的用户名和邮箱
    安装好之后,在安装路径下找到gitbash,双击,在里面配置用户名和邮箱,如图所示:
配置用户名和邮箱

所用的两个命令:

git config --global user.name "username"
git config --global user.email "useremail"

注意:如果输入一行,回车后没有错误表示配置成功

查看参数配置是否成功,输入以下命令:

git config --list

如果出现下图中的两行,表明配置成功:

出现如图所示两行,表明配置成功了

另外:git可以通过 客户端GUI界面命令行界面 两种方式来使用
客户端GUI界面:
下载地址:https://www.sourcetreeapp.com/
安装比较简单,注册部分很快就注册好了,或者可以参考https://www.cnblogs.com/lucio110/p/8192792.html

安装GUI的过程中,Mercurial是版本控制系统高级选项中如下所示的地方要记清自己有没有选(′д` )…彡…彡


选了LF到CRLF的自动转换

命令行通过打开gitbash的界面来进行操作。

  1. 初始化版本库
git init
  1. 添加文件到版本库
git add
git commit
  1. 查看仓库状态
git status

接下来演示一个示例:

示例:创建新仓库,添加文件到 --本地-- 仓库:

  1. 创建新仓库
    1.1. 在sourcetree上点击文件--> 克隆/新建 按钮,选择 create 创建新仓库
    1.2. 选择目标路径
    1.3. 点击创建
    这个步骤相当于用 git init 命令来初始化版本库
    如图所示:
    创建仓库的过程
  2. 添加文件
    在左边目录下创建一个文件,并写入内容,保存之后,文件存放在未暂存区,右击该文件,点击添加,文件被加入到暂存区,这部分相当于命令行中的git add命令
    3.提交文件
    在软件的下方输入commit的描述,然后点击右下角进行提交
    提交之后,会自动创建一个master分支

命令行模式示例:

在界面的右上角有一个“命令行模式”的按钮,可以快速打开命令行

pwd命令:显示当前目录:

pwd命令

ll命令:文件的详细信息:

ll命令

ls -a 展示所有隐藏与不隐藏的目录:

展示所有隐藏与不隐藏的目录

cat test.txt:展示test.txt文件中的内容

展示test.txt文件中的内容
  1. 创建git版本库:
git init命令创建版本库
  1. 将内容"git repo"追加到文件test.txt中
将内容"git repo"追加到文件test.txt中
  1. 添加文件
添加文件
  1. 提交文件
提交文件
最后再通过git status命令查看当前仓库中的状态: 查看仓库中的状态

3.git工作流

首先做一个示例,然后再对工作流这个概念进行总结归纳。

  1. 暂存区到目录区的回滚
    如果因为需求变更等原因,需要修改代码,但是在需求变更的过程中,需要暂时停止开发,需要把文件保存到已暂存区域。
    如果在这时需求又不需要变更,则在已暂存文件区域右击该文件,将其丢弃:
暂存区到目录区的回滚
2.删除第三次已提交的请求
三次请求的内容
需要右击第二次提交,选择 重置当前分支到此次提交

会弹出如下对话框:

选择确定

这样就能回滚到它的前一次提交了,而第三次修改后的文件会放到未暂存区域,注意:此时文件中的内容还包括第三次提交时的内容,如果想彻底改回第二次提交时的内容,需要丢弃未暂存区域的文件,如下:

丢弃未暂存区域的文件
文件中的内容
  1. 删除特定的文件
    首先在本地的资源文件工作区中删除该文件,此时该文件在git版本中的状态如下:
删除工作区中文件后该文件在git版本库中的状态

需要继续将其添加到已暂存区,并提交后,该文件才能真正被删除


-----------------这里是以上操作的命令行实战演练分割线(#`O′)-----------------


1. 暂存区到目录区的回滚
还未添加到已暂存区的文件在命令行中测试git版本库的状态时:

git版本库存在未添加到已存区的文件时的状态

添加到已暂存区:

添加到已存区

此时版本库的状态:

已暂存区有文件时版本库的状态

然后用commit命令提交:


首次提交workflow_demo.txt

临时变更需求:


第二行为临时变更的内容
由于下班等原因暂停写代码,需要先把代码添加到已暂存区(这是因为个人电脑可能会不定期修改,如果没有添加到已暂存区,可能没有记录)
通过以下代码提交到已暂存区:
提交到已暂存区

(临时开发且没有做过自测的代码只添加到已暂存区,而不进行提交)
这时将版本回退到未修改时:


回退命令
此时文件中的内容如下:
虽然回退到之前的版本,但文件中的内容并未完全清除
当执行以下操作时,文件中的内容才被完全清除:
清除文件中未暂存区域代码的命令
此时文件中的内容:
文件中的内容

2.删除第三次已提交的请求
在对文件进行第二次修改后,在命令行执行以下操作:

第二次需求的提交

git log命令可以查看每次comiit的commit号:

通过该命令查看commit号,然后使用以下命令清除目前版本,回滚到上一版本:

3. 删除特定的文件
用如下命令删除:

删除特定文件

此时,暂存区已被清除,仓库区还没有被完全清除,需要如下提交一下才可以完全清除:

使仓库区变干净

总结:

4.本地与远程仓库

4.1 远程仓库的创建:
  1. 创建SSH key:
    (需要创建SSH是由于本地仓库与github之间是通过SSH加密传输的)
    登录git-hub,打开settings,侧边栏有个SSH and GPG keys,如下:

然后点击new ssh key按钮:

出现:


在标号(1)处填入密钥名称,在标号(2)处填入key,key的生成命令如下:

ssh-keygen -t rsa -C "emailaddress@163.com"

具体操作如下:


获得key后,到key所在路径下:

将密钥复制到上面github网页中标号(2)的方框中,点击add ssh key按钮,key就生成了,如下:

(注意,这里用的是公钥)
之后,用如下命令判断本地仓库是否和github连通:

ssh -T git@github.com

实际操作如下:

初次连接时可能会有询问和警告 二次连接没有问题

这样本地仓库就和github连通了,但是!!!现在还没有跟远程仓库建立连接,所以接下来就是与远程仓库建立连接的过程(✿◕‿◕✿)

4.1 添加远程仓库:

添加远程仓库的命令主要有以下三个:

git remote add origin git@github.com/workflow_demo.git
git pull origin master  --allow-unrelated-histories
git push -u origin master

错误中指出远程仓库中存在本地仓库中没有的文件,所以需要先把远程仓库的文件pull下来, --allow-unrelated-histories是告诉git,即使本地和远程有不相关的commit历史,也可以合并本地和远程的分支为一个分支。执行第二步,git bash上显示如下:

这样就可以进行第三步操作了o( ̄▽ ̄)ブ
(关于master和origin/master的区别请看-->In Git, what is the difference between origin/master vs origin master?

然后现在来个实战操作,再来梳理一下添加远程仓库的过程:
在通过ssh key与github建立连接后,在github创建一个仓库,创建完成后,在仓库页面可以找到仓库的链接:

复制这个链接,在命令行输入以下命令:

这样就在本地添加了远程的这个仓库。

如果现在该目录下是如下状态时:

就可以直接push本地的项目到github仓库中啦:

将本地仓库的项目push到github仓库中

在最后一个push命令中出现了超时的问题,最后从知乎上找到了答案,感谢伟大的知友,附上链接:
使用github出了些问题?fatal: unable to access;Failed connect to github.com:8087; No error - yun liu的回答 - 知乎
侵删(o゜▽゜)o☆

以下是出现问题的语句:

以及解决办法:

sourcetree界面相对比较简单,在commit操作之后,首次push操作只需要右击master,点击 创建拉取请求 按钮,添加远程仓库,并推送就可以了,具体操作看以下几个图:

首次设置出现该对话框,点击确定即可

这样,在sourcetree远程菜单下会出现:

最后:

就可以把修改推送到github啦★,°:.☆( ̄▽ ̄)/$:.°★

5.克隆仓库

将远程仓库中的代码克隆一份到本地,然后基于本地代码进行开发,再远程推送,用到的命令只有一个:

git clone git@github.com:believe563/***.git

该命令的作用就是将远程仓库的代码克隆一份到本地
使用该命令后,远程仓库会克隆到当前目录下。
因为此时本地仓库和远程仓库已经建立连接,所以再次修改提交时,只需要用git push命令就可以

sourcetree克隆仓库需要填写要克隆到的目录:

6.标签管理

标签相当于版本号,上线时,如果想回滚,主要是通过标签来回滚,而不是通过分支或commit来回滚
用到的命令主要有:

git tag                       //查看所有标签
git tag name                  //创建标签
git tag -a name -m "commit"   //指定提交信息,-m表示可直接输入后面的备注字符串,而不用打开vim窗口
git tag -d name               //删除标签
git push origin name          //标签发布 

这样,在github上就可以看到标签号了:

用soursetree添加标签:

选标签按钮 添加标签 指定的提交

添加完成后,sourcetree界面和github界面显示为:

这样删除之后本地已经没有标签了,但是远程还有标签,还需要用如下命令删除远程的标签:

sourcetree:

sourcetree删除标签v2.0.1 勾选后会从github上删除

可以看到,标签已被删除,但是更新提交的内容没有被删除

6.分支管理

分支管理有助于个人在公司开发时,(将个人的开发放在单独的分支),既不影响整体代码,又可以保证自己每天的进度被看到。在开发完成后,再与团队的分支进行合并

git branch branchname  //创建一个分支
git branch             //查看当前在哪一个分支上,变绿的分支是当前使用的分支
git checkout branchname  //切换分支
git merge thebranchtobemerged  //用当前分支合并该分支
git branch -d branchname  //删除分支

命令行实现如图所示:

创建分支与切换分支 分支的合并 分支的删除

sourcetree上对分支的操作比较简单,这里不再举例


补充说明:

回到过去的版本:
首先用git log查看修改日志
然后用git reset --hard commit号来定位到commit号对应的版本

回到未来的版本:
需要找到未来版本的id,通过git reflog命令查找
然后用git reset --hard 最近一次的id号(7位)回到最近一次修改的版本

撤销未提交的修改:
git checkout 文件路径/文件名,这个命令适用于被修改的文件没有通过git add命令添加过,如果被添加过,需要通过git reset HEAD 文件路径/文件名命令来取消添加,撤销之后再用git checkout 文件路径/文件名命令来撤销

像bin目录和gen目录下的文件都是会自动生成的,所以可以在.ignore文件下忽略掉这些文件夹,写作:

bin/
gen/

这样就把bin目录和gen目录下的所有文件都忽略掉,从而它们不会加入到版本控制当中。

  1. 查看所修改的具体内容

git status查看有没有文件被修改后还没提交的情况
git diff 某个被修改后未提交文件来查看具体文件的更改内容
例如,修改了项目中的README.md文件,用git status命令查看如下:

git status命令查看到有文件的变化

再用git diff命令找到该文件下被修改了的具体位置:

注意,如果某句前面是减号,表示删除的部分,加号表示添加的部分。

类似的,如果是修改了Android项目中的某java文件,就写成如下形式:

git diff src/com/example/test/MainActivity.java
  1. 查看提交记录
    git log命令查看所有提交记录
    git log 记录id -1命令查看其中一条记录
    git log 记录id -1 -p命令查看这条提交记录具体修改了什么内容

情形1:

将文件夹push到github时,文件夹名变为灰色且不能点击:
首先 删除该目录:

git rm -r --cached .idea  #--cached不会把本地的.idea删除
git commit -m 'delete .idea dir'
git push -u origin master

其次 重新执行add、commit和push操作



整篇文章写完啦 学到新的东西会继续更新** o( ̄▽ ̄)ブ
(感觉还是需要多运用才能得心应手(ง •_•)ง)

上一篇 下一篇

猜你喜欢

热点阅读