1.Git分布式版本控制工具
1.1 git应用场景
备份、代码还原、协同开发、追溯问题代码的编写人和编写时间。
1.2 版本控制器的方式(了解)
集中式版本控制: 需要联网,个人修改后提交到中央版本库。举例:SVN 分布式版本控制 无需联网,无中央版本库,每个人的电脑都是一个完整的版本库。举例:Git
1.3 git工作流程图
2. git安装与配置以及基本操作
2.1 git下载安装环境配置
https://git-scm.com/download
安装成功后鼠标左键会出现如下 Git GUI:Git提供的图形界面。 Git Bash:Git提供的命令行工具。(类似Linux窗口)
安装后要设置用户名称和email地址。
git config --global user.name "用户名"
git config --global user.email "邮箱"
git config --global user.name
git config --global user.email
2.2 为常用指令配置别名
有些常用指令参数非常多,我们可以设置别名简化操作。 1.在用户目录中创建.bashrc文件 若系统不允许用户随意创建以"."开头的文件,可以打开gitBash,执行touch ~/.bashrc 2.在创建的文件中输入如下内容:
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件以及基本信息
alias ll='ls -al'
2.3解决GitBash乱码问题
1.打开GitBash执行以下命令 git config --global core.quotepath false 2.${git_home}/etc/bash.bashrc 文件最后加入下面两行
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
2.4git的常用命令(类似linux操作)
Is/ll 查看当前目录 cat 查看文件内容 touch 创建文件 vi vi编辑器 clear清除命令窗口 rm xxx 删除xxx文件 mv xxx xxxx 将文件xxx改名成为xxxx 或者将xxx移动到文件夹xxxx中
这里简单讲讲vi编辑器的操作: 刚打开时vi为命令行模式,可以进行光标的移动。 按i进入插入模式,可以对文件内容进行修改编写。 按esc可以退出插入模式,变为命令模式。 按"shift"+":"可以转换为底行模式,输入w保存,输入q退出,输入wq保存并退出。
3.开始上手git
3.1获取本地仓库
1.在本地任意位置建立一个文件夹作为自己的仓库。 2.改文件夹中右键选择git bash here。 3.输入git init指令,将该文件夹初始化为一个仓库,同时会生成一个.git文件夹。
3.2 文件的状态
.git文件夹所在的目录为git的工作目录。存放在该目录下的文件会有着几种状态(.git目录除外)。 unstaged:当前文件被修改,且未加入到暂存区中。 untracked:当前文件被创建,且未加入到暂存区中。 staged:改文件已经加入到暂存区中。
3.3 文件状态的更改
通过git add指令将文件添加到暂存区中。 通过git commit指令将文件进行提交。 文件提交后,文件才能算是进入仓库。 1.git add :工作区—>暂存区 2.git commit: 工作区—>仓库。
1.git add
#将工作区中的所有文件添加到暂存区
git add .
#添加指定文件到暂存区
git add [文件名]
2.git commit
git commit [选项]
#将所有暂存区的文件提交,自动打开vi编辑器写入提交备注
git commit
#提交,同时写入备注
git commit -m "备注信息"
3.git status
#查看文件文件状态
git status
创建一个叫做testing.txt文件,在输入git status指令 这里红色为未加入暂存区的文件。 将testing.txt加入暂存区,再查看状态。 文件变为绿色,表示该文件加入了暂存区。 之后commit提交。 文件提交到仓库,暂存区清空。
3.4 提交记录的查看
git log 输出提交记录信息。
git log [option]
option :
--all #显示所有分支
--pretty=oneline #将提交的信息显示为一行
--abbrev-commit #使输出的commitId更加简短
--graph #以图的形式显示
--decorate #可以显示分支与标签信息
为了使输出的信息更加清晰直观,通常都会使用
git log --all --abbrev-commit --graph --pretty--online --decorate
如图:显示了简短commitId、备注信息、分支情况等。
3.5 使用别名
为了使输出的提交记录更加的清晰明确,我们在命令git log 后加入了很多的参数,使得操作麻烦。我们可以通过使用别名的方式简化参数的输入。 1.在用户目录中创建名为.bashrc 文件。 2.用记事本打开,写入一下代码。
#输出git提交日志
alias git-log = 'git log --all --abbrev-commit --graph --pretty--online --decorate'
然后保存,以后我们可以直接使用git-log 来输出提交记录。 同样的,我们可以以创建其他命令的别名,例如:
#输出当前目录所有文件以及基本信息
alias ll="ls -al"
保存后,可以使用ll 输出当前目录所有文件以及基本信息。
3.6 版本回退
git reset --hard commitID --hard 重置HEAD,index和工作区。 commitID可以用git log 查看。 黄色的部分就是每条记录对应的commitID。 通过git reset可以返回到提交该指令时的状态。
git reflog 可以显示之前删除的提交记录。
3.6 .gitignore文件
在.git目录下创建.gitignore文件来指定哪些不需要用git来进行管理。 例如:在.gitignore文件中输入*.a,所有.a类型的文件git将不会管理。 一些实例:
3.7 分支
分支可以把你的工作从开发主线上分离开来进行其他方面的开发改写(bug的修复、新功能的开发等 )。
3.7.1.git branch
#查看分支
git branch
#添加分支xxx
git branch xxx
关于HEAD HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。 通过git cheakout xxx 来选择xxx分支。这里其实就是改变HEAD的指向。 使用git cheakout -b xxx 可以创建xxx分支同时选择xxx分支,相当于git branch xxx 然后 git cheakout xxx 。
3.7.2.git merge
#当前分支与dev分支进行融合
git merge dev
改变的是当前分支,而参与融合的dev分支不会收到任何影响。
#删除分支
git branch -d xxx
#强制删除
git branch -D xxx
3.7.3 解决分支冲突
当有俩个分支同时修改同一个文件后,然后进行分支的合并,会出现分支冲突。 例如在master分支中修改texting文件username=zhoujian 而在dev分支中修改texting文件username=zhouqi 然后合并出现:
此时git无法进行合并,需要程序员进行选择分支修改。
1.直接改写文件 2.然后git add git commit操作。 合并的快进模式 创建dev分支,在dev分支下更改(或者创建其他文件)提交。
之后切换到master进行合并
3.7.4合并的快进模式
上面的Fast-forward即为合并的快进模式。 dev分支的进度比master快,内容比master多,所以master与dev分支进行merge时,会产生快进模式。
4. Git与远程仓库的连接
4.1 SSH公钥
简而言之,就是类似密码。将该密码放置到远程仓库,当本地git与远程仓库连接时,会匹配该密码。
#生成rsa类型的ssh密钥
ssh-keygen -t rsa
这里不停回车就行了。中间会要你设置密码,可以自行设置,如果要更改密码可以使用 ssh -keygen -p 进行更改。
4.2 远程仓库
github https://github.com gitee https://gitee.com/ 自己选择一个远程仓库注册一个账号。
4.3Gitee设置账户公钥
首先获取自己的公钥, cat ~/.ssh/id_rsa.pub 验证是否配置成功,如果你设置了密码,是要输入密码的。
4.4创建仓库
输入相关信息,点击创建后出现下图。 仓库创建成功。
4.5操控远程仓库
4.5.1连接仓库
此操作是先初始化本地库,然后与已创建的远程库进行对接。 git remote add <远端名称> <仓库路径> 远程名称一般会命名为origin。 仓库路径选择SSH复制。
git remote add origin git@gitee.com:chizhangjisui/git_test02.git 查看远程仓库git remote
4.5.2 推送仓库
git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ] 将本地仓库推到线上仓库中去。 本地代码和云端代码修改了同一种东西会有冲突,不会让你push,使用-f进行强制覆盖。 如果本地分支和远程分支一样名字,可以直接写master,无需写master:master。 –set-upstream 建立好本地分支与远程分支的联系,之后直接使用git push就可以直接将本地的master和远程的master对应push。即省略掉分支名和远端名直接git push。 使用git branch -vv可以查看分支关系。 红框框显示了本地分支与线上分支的关联。
4.5.3克隆、抓取和拉取
#克隆仓库
git clone <仓库路径> [本地目录]
git clone git@gitee.com:chizhangjisui/git_test02.git /testting
本地目录可以省略,会自动生成一个目录.
远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。
#抓取指令就是将仓库里的更新都抓取到本地,不会进行合并.
#如果不指定远端名称和分支名,则抓取所有分支。
git fetch [remote name] [branch name]
#拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
#如果不指定远端名称和分支名,则抓取所有并更新当前分支。
git pull [remote name] [branch name]
4.5.4解决合并冲突
类型分支merge融合的冲突,在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。
A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支。
|