git
一、概述
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull,
说明:
workspace:工作区
staging area:暂存区/缓存区
local repository:版本库或本地仓库
remote repository:远程仓库
二、git常用操作
常用教程入口:
菜鸟:https://www.runoob.com/git/git-install-setup.html
廖雪峰:https://www.liaoxuefeng.com/wiki/896043488029600/896202780297248
版本查看: git –version
1、
git add
(用于将本地
工作区
(就是本地电脑)的文件提交到
暂存区
中(此时提交的文件在本地))
git add * // 添加所有文件到暂存区
git add . // 添加所有文件到暂存区
(注意:git add . 会把本地所有untrack的文件都加入暂存区,并且会根据.gitignore做过滤,但是git add * 会忽略.gitignore把任何文件都加入。常使用 git add .)
git add -u . // -u 表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件
git add -A . // -A 表示将所有的已跟踪的文件的修改与删除和新增的未跟踪的文件都添加到暂存区
git add *.html // 添加某个文件类型到暂存区,比如所有的 .html 文件
git add index/ // 添加整个文件夹到暂存区,比如index文件夹
git add index/index.html // 添加某个文件或者某个文件夹中的某个文件到暂存区 ,比如 index 下的 index.html 文件
2、git commit
git commit // 用于将暂存区中的文件提交到版本库中(此时文件还在本地),要想提交到远程,必须经过 git push
git commit -m ‘注释’ // 将缓存区内容添加到本地仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RODRwJFI-1679046904164)(C:\Users\wangfengyan\AppData\Roaming\Typora\typora-user-images\image-20220802171144312.png)]
3、git push到远程仓库
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名。第一个master是本地分支名,第二个master是远程分支名。
git push origin master 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin :refs/for/master 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin –delete master
git push origin 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push 如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名。
4、查看版本
git log //查看提交历史记录,从最近到最远,可以看到3次
git log --pretty=oneline //加参,简洁查看
git log --author=Linus // 指定用户的提交日志,比方说我们要找 Git 源码中 Linus 提交的部分:指定用户的提交日志
git reflog //查看每一次修改历史
cat test.txt //查看文件内容
git status //查看工作区中文件当前状态
git blame README // 以列表形式显示修改记录
5、版本回退
三种模式:
git reset --mixd(默认,该模式可不指定) HEAD^
git reset --soft HEAD^
git reset --hard HEAD^
区别:
git reset --mixed:撤销上一次commit和add,回到本地编辑的状态,把上次已经commit提交的内容和已经add到暂存区的内容,都撤销,放回到本地工作区,需要重新add和commit。
git reset --soft:撤销上一次commit,回到git add.的状态,把已经提交到仓库的内容撤销放回暂存区中,本地工作区还没add的内容不受影响。
git reset --hard:撤销上一次对文件的所有修改,包括暂存区和上次已经提交到远程仓库的内容通通清除。
使用场景:
--hard:(1) 要放弃目前本地的所有改变時,即去掉所有add到暂存区的文件和工作区的文件,可以执行 git reset -hard HEAD 来强制恢复git管理的文件夹的內容及状态;(2) 真的想抛弃目标节点后的所有commit(可能觉得目标节点到原节点之间的commit提交都是错了,之前所有的commit有问题)。
--soft:原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files),所以假如我们之前工作目录没有改过任何文件,也没add到暂存区,那么使用reset --soft后,我们可以直接执行 git commit 將 index暂存区中的內容提交至 repository 中。为什么要这样呢?这样做的使用场景是:假如我们想合并「当前节点」与「reset目标节点」之间不具太大意义的 commit 记录(可能是阶段性地频繁提交,就是开发一个功能的时候,改或者增加一个文件的时候就commit,这样做导致一个完整的功能可能会好多个commit点,这时假如你需要把这些commit整合成一个commit的时候)時,可以考虑使用reset --soft来让 commit 演进线图较为清晰。总而言之,可以使用--soft合并commit节点。
--mixed(默认):(1)使用完reset --mixed后,我們可以直接执行 git add 将這些改变果的文件內容加入 index 暂存区中,再执行 git commit 将 Index暂存区 中的內容提交至Repository中,这样一样可以达到合并commit节点的效果(与上面--soft合并commit节点差不多,只是多了git add添加到暂存区的操作);(2)移除所有Index暂存区中准备要提交的文件(Staged files),我们可以执行 git reset HEAD 来 Unstage 所有已列入 Index暂存区 的待提交的文件。(有时候发现add错文件到暂存区,就可以使用命令)。(3)commit提交某些错误代码,或者没有必要的文件也被commit上去,不想再修改错误再commit(因为会留下一个错误commit点),可以回退到正确的commit点上,然后所有原节点和reset节点之间差异会返回工作目录,假如有个没必要的文件的话就可以直接删除了,再commit上去就OK了。
git reset HEAD^ # 回退所有内容到上一个版本
git reset HEAD^ hello.java # 回退 hello.java 文件的版本到上一个版本
git reset 052efajhfwehf # 回退到指定版本
git reset –hard HEAD~3 # 回退上上上一个版本 z数字代表上几个 以此类推
git reset --hard origin/master # 将本地的状态回退到和远程仓库的一样
HEAD 说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
以此类推...
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
6、删除文件
rm test.txt
//直接删除
git rm test.txt
git commit -m "remove test.txt"
//删错了,恢复
git checkout -- test.txt
git checkout . // 撤销所有未提交的修改
git checkout filename // 撤销此文件的修改
7、多人协作
git checkout -b dev //创建并切换到分支dev
//创建并切换到分支dev,同上
git branch dev //创建
git checkout dev //切换
//新版本
git switch -c dev //创建并切换到分支dev
git switch master //直接切换分支
git branch //查看当前分支
git merge dev (--no-ff)(-m)//合并,把dev分支的工作成果合并到master分支上
git branch -d dev //删除dev分支
8、分支管理
git branch -l // 用branch命令列出分支
git branch 分支名 // 创建分支
git checkout 分支名 // 用checkout切换本地分支
git branch -d 分支名 // 删除本地分支
git branch -r -d origin/分支名 // 删除远程分支
git push origin :分支名 // 删除远程分支
9、合并分支
想将dev分支合并到master分支,操作如下:
1、首先切换到master分支上
git checkout master
2、如果是多人开发的话 需要把远程master上的代码pull下来
git pull origin master
3、然后我们把dev分支的代码合并到master上
git merge dev
4、然后查看状态及执行提交命令
git status
5、git push origin master
10、常用命令速查表
工具TortoiseGit
一、概况
TortoiseGit 简称 tgit, 中文名海龟Git。TortoiseGit是一个开放的GIT版本控制系统的源客户端。
TortoiseGit 支持Winxp/vista/win7/Win10,提供有中文版支持。
TortoiseGit 可以恢复您的文件的旧版本,并研究如何以及合适改变了历史数据,谁改变了它。下面教程针对使用TortoiseGit 的用户。
(注:Tortoisegit是Git的一个插件,Git程序本身还是要安装的)
汉化包: https://tortoisegit.org/download/
二、安装和使用
1、汉化包安装
在电脑某个盘的文件里右键,如下图所示,设置完中文后,应用,再确定,退出窗口,重新右键,即变成中文了
配置用户,用户作为你操作git的个人标识,进入设置,点选左边的Git标签,可以发现,右边可以配置用户的名字与Email信息.
2、使用
1>克隆项目,复制git仓库地址,选择git克隆
2> 代码提交
3> 拉取代码
4>代码提交,选择推送,根据弹出层选择远端内容提交