目录
一、SVN与Git区别
svn:集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作的,局域网或互联网。个人修改后然后提交到中央版本库。
Git:分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需联网。因为版本库就在你自己的电脑上,多人协作只需要各自的修改推送给对象,就能互相看到对象的修改了。
二、Git工作流程
1.clone(克隆):从远程仓库中克隆代码到本地仓库
2.checkout(检出):从本地仓库检出一个仓库分支然后进行修订
3.add(添加):在提交前先将代码提交到暂存区
4.commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
5.fetch(抓取):从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
6.pull(拉取):从远程库拉到本地库,自动进行合并(merge),然后放到工作区,相当于fetch+merge
7.push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
三、Git安装与常用命令
- ls/ll 查看当前目录
- cat 查看文件内容
- touch 创建文件
- vi vi编辑器(使用vi编辑器是为了方便展示效果)
- clear 清屏
- pwd 显示当前所在目录路径
- rm 删除一个文件
- mkdir 创建一个目录
- rm -r 删除一个文件夹
- rm -rf 删除电脑中全部文件! 切勿在linux中使用
- mv:移动文件,例如:mv index.html test 把index.html文件移动到test文件下
- history 查看历史命令
- reset 重新初始化终端/清屏
- help 帮助
- exit 退出
- # 表示注释
1.下载与安装
下载地址:https://git-scm.com/download
2. 基本配置
2.1 打开Git Bash
2.2 设置用户信息
- git config --global user.name "用户名"
- git config --global user.email "邮箱"
查看配置信息
- git config --global user.name
- git config --global user.email
2.3 为常用指令配置别名(可选)
1. 打开用户目录,创建.bashrc文件
2. 再.bashrc文件中输入如下内容:
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'
3. 打开gitBash,执行source ~/.bashrc
简化日志完整输出:
git log --pretty=oneline --abbrev-commit --all --graph
2.3获取本地仓库
要使用Git对我们的代码版本控制,首先需要获得本地仓库
1)在电脑的任意位置创建一个空目录,作为我们的本地GIt仓库
2)进入这个目录,点击右键打开Git Bash
3)执行命令 git init (初始化当前目录为一个git仓库)
4)如果创建成功后可在文件夹下看到隐藏的.git目录
2.4 git常用指令
查看修改的状态(status)
作用:查看修改的状态(暂存区、工作区)
命令形式:git status
*添加工作区到暂存区(add)
作用:添加工作区一个或多个文件的修改到暂存区
命令形式:git add 单个文件名 | 通配符
将所有修改加入暂存区: git add .
*提交暂存区到本地仓库(commit)
作用:提交暂存区内容到本地仓库的当前分支
命令形式:git commit -m '注释内容'
*查看提交日志(log)
命令形式:git log [option]
option:
- --all 显示所有分支
- --pretty=oneline 将提交信息显示为一行
- --abbrev-commit 使得输出的commitID更简短
- --graph 以图的形式显示
版本回退
git reset --hard commitID 作用是版本,切换
commitID可以使用git-log或git log 指令查看
如何查看已经删除的记录?
git reflog 这个指令可以看到已经删除的提交记录
2.5 分支
查看本地分支
命令:git branch
*切换分支(checkout)
命令:git checkout 分支名
还可以直接切换到一个不存在的分支(创建并切换)
命令:git checkout -b 分支名
*合并分支(merge)
一个分支上的提交可以合并到另一个分支
命令:git merge 分支名称
删除分支
不能删除当前分支,只能删除其他分支
git branch -d b1 删除分支时,需要做各种检查
git branch -D b1 不做任何检查,强制删除
git远程仓库
创建远程仓库(以码云为例)
配置SSH公钥
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com" 按照提示完成三次回车,即可生成 ssh key
cat ~/.ssh/id_ed25519.pub 获取到你的 public key
然后在码云设置,SSH公钥出添加
添加远程仓库
此操作是先初始化本地仓库,然后与已创建远程仓库连接
命令:git remote add <远端名称> <仓库路径>
远端名称:默认是origin 取决于远端服务器设置
仓库路径:从远端服务器获取
查看远程仓库
命令:git remote
推送到远程仓库
命令:git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名]]
如果远程分支名和本地分支名称相同,则可以只写本地分支
git push origin master
-f 表示强制覆盖
--set-upstream 推送到远端的同时并且建立起和远端分支的关联关系
git push --set-upstream origin master
如果当前分支已经和远端分支关联,则可以省略分支名和远端名
git push 将master分支推送到已经关联的远端分支
本地分支与远程分支的关联关系
查看关联关系可以使用 git branch -vv 命令
从远程仓库克隆
如果已经有一个远端仓库,可以直接clone到本地
命令:git clone <仓库路径>[本地目录]
本地目录可以省略,会自动生成一个目录
从远程仓库中抓取和拉取
远程分支和本地分支一样,可以进行merge操作,只需要先把远程仓库里的更新都下载到本地,再进行操作。
抓取命令: git fetch [remote name] [branch name]
- 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
- 如果不指定远端名称和分支名,则抓取所有分支
拉取命令:git pull [remote name] [branch name]
- 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
- 如果不指定远端铭恒和分支名,则抓取所有并更新当前分支
2.6 git stash 暂存工作区修改的内容
有时候本地修改的代码,还不想推送到远程,但是此时又想要切换开发分支到master或其他分支,此时可以使用 git stash 命令。
git stash 暂存工作区修改内容
git stash pop 恢复暂存区修改的内容
实际工作中会使用上面两个足够了!
2.7 git 把多个commit合并成一个commit
实际工作中,开发一个需求你可能会提交很多个commit,尤其是编码习惯不好或者bug比较多的小伙伴们,在封板前可能会提交非常多的commit,不美观。这让领导看到后是非常头大的事情,而且不利于后期回退。
下面教大家怎么操作:
1. git log 查看代码提交记录
2. git rebase -i HEAD~n (n表示想要合并的commit数)
pick 3ca6ec3 '注释**********'
pick 1b40566 '注释*********'
pick 53f244a '注释**********'
pick 3ca6ec3 '注释**********'
s 1b40566 '注释*********'
s 53f244a '注释**********'
此时按 “i” 进入编辑模式, 把上面的 “pick” 修改为 “s” ,记住保留最上面的一个不要 修改,所有的记录都会合并到第一个。修改完成后,按 “ESC” 退出编辑模式,然后按 “:wq”保存。
此时如果没有冲突,则继续 “:wq” 保存
最后 git push -f 强推上去即可。
注意:也可以使用git rebase -i HEAD “某一个commit”,表示的意思是指定合并某个commit之前的版本,不包括这个commit