版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。并行开发、提高开发效率,减轻开发人员的负担,节省时间,同时降低人为错误。简单说就是便于管理多人协同开发项目的技术。
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆,在本地机器上拷贝一个完整的Git仓库。这样就可以在本地查看所有版本历史,可以离线在本地提交,在连网时push即可,不会因为服务器损坏或者网络问题,造成不能工作的情况。同时只要有一个用户的设备没有问题就可以恢复所有的数据。
Git本地有三个工作区,再加上远程的git仓库共四个工作区:
工作目录(Working Directory)
工作区,就是你平时存放项目代码的地方
暂存区(Stage/Index)
暂存区,用于临时存放你的改动
资源库(Repository)
仓库区,就是安全存放数据的位置
git仓库(Remote Directory)
远程仓库,托管代码的服务器
分支默认是master主分支,可以创建新的分支用于不同的用途或不同部门的人并行开发,比如开发,测试,发布,紧急修复等等。从主线上分离出来进行另外的操作,而又不影响主线就像线程一样,或者看作互不影响的平行宇宙,当需要的时候还可以进行合并分支等操作。
常用指令:
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch-name]
# 合并指定分支到当前分支
$ git merge [branch-name]
#切换分支
$ git checkout [branch-name]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
HEAD指针
Git中存在一个HEAD指针,在每次提交时HEAD指针会向前进一位,同时HEAD指针只存在于暂存区和仓库区。也就是说如果我们使用git add命令,那么此时HEAD指针会进入到暂存区,继续用git commit,此时会进入到仓库区。
git reset
git reset其实就是把HEAD指针回退一位。即如果你在仓库区,那么你回退一位就是暂存区,如果你在暂存区,那么指针会回退到上一次的仓库区。reset命令提供了三种使用方法。分别是–soft --mixed --hard:
git reset --soft #移动指针
git reset --mixed #移动指针+清空暂存区
git reset --hard #移动指针+清空暂存区+清空工作区
小结:
reset | checkout | |
---|---|---|
原理 | 头指针回退到上一个 | 更新当前代码为头指针指向的提交 |
异同 | 还原本地文件(撤销) | 还原本地文件(替换) |
fetch | clone | pull | |
---|---|---|---|
适合场景 | 有本地仓库主分支,下载其他分支 | 没有本地仓库 | 本地仓库和远程仓库不同步 |
异同 | 从远程获取最新到本地,不会自动merg | 把仓库克隆到本地 ,无需有本地仓库(即git init) | 从远程获取最新并merge到本地 |
小结:
git pull = git fetch + git merge,这样fetch就比较有优势,可以下载后根据情况再选择是否合并,而clone就是从无到有的过程。
下载好后安装默认下一步即可,安装完后菜单会有三个程序:
#查看当前用户配置
git config --global --list
git config --global user.name "123" #名称
git config --global user.email [email protected] #邮箱
#查看系统配置
git config --system --list
Git\etc\gitconfig (Git 安装目录下的 gitconfig)
ssh-keygen -t rsa -C "注册邮箱"
2. 打开.ssh下的id_rsa.pub文件,复制里面key的内容
3. 进入github,头像->settings->SSH and GPG keys->new SSH key
输入命令行ssh -T [email protected]测试,如图就成功连上github。
git remote #查看已关联的远程仓库
git remote rm 仓库名 #删除
git remote add 仓库名 你的仓库ssh #添加/关联
不能重复仓库名,这里origin重复了,可以取其他名,我演示删除后再添加。
符号 | 作用 | 例子 |
---|---|---|
名称的最前面是感叹号! | 表示将不被忽略 | !lib.txt(lib.txt除外) |
名称的最前面是路径分隔符/ | 表示要忽略的文件在此目录下,而子目录中的文件不忽略。 | /temp (仅忽略项目根目录下的TODO文件,不包括其它目录temp ) |
名称的最后面是路径分隔符/ | 表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略) | build/ (忽略build/目录下的所有文件 ) |
还可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。例:
.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
doc/.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
(好像扯远了)
删除工作区test.txt文件,打开Git Bash,查看文件状态,提示deleted文件:test.txt,输入 git rm test.txt同步暂存区,类似与git add 。
强制把远程仓库内容同步到本地。
git reset --hard origin/master #放弃本地修改
git pull #从远程获取并合并,等同于git fetch + git merge
设置Git
打开File–>Setting->Version Control–>Git–>Path to Git executable选择你的git安装后的git.exe文件,然后点击Test,测试是否设置成功。
创建本地仓库
VCS–>Import Version Control–>Creat Git Respository,选择项目目录
IDEA出现如下图变化:
可以打开Terminal用我们熟悉的命令行操作,也可以用右上角IDEA集成的按钮来操作。
命令行就不再赘述了,继续介绍IDEA集成。
添加到暂存区
右键项目–>Git–>add(等同于 git add .)
add完后文件会变成绿色,输入git status也可查看。
commit提交到本地仓库
可以右键项目–>Git–>commit Directory 或则右上角√或左侧导航
等同于git commit -m “航空票务系统”
7.同步到远程仓库
VCS–>Import into Version Control–>Share Project on GitHub
在弹框中输入仓库名和描述,点击Share。
同步成功:
指令 | 作用 |
---|---|
cd | 改变目录 |
cd . . | 回退到上一个目录,直接cd进入默认目录 |
pwd : | 显示当前所在的目录路径。 |
ls(ll) | 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。 |
touch | 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。 |
rm | 删除一个文件, rm index.js 就会把index.js文件删除。 |
mkdir | 新建一个目录,就是新建一个文件夹。 |
rm -r | 删除一个文件夹, rm -r src 删除src目录 |
mv | 移动文件 |
reset | 重新初始化终端/清屏 |
clear | 清屏 |
history | 查看命令历史。 |
help | 帮助 |
exit | 退出 |
# | 表示注释 |
原创不易,请支持正版。
博主地址:https://blog.csdn.net/qq_45034708
你的点赞将会是我最大的动力