Git手把手0基础最全使用教程(常见的Git基本操作)(Git的安装)(Gitee的使用)(远程仓库)(分支管理)(标签管理)(简单的Linux命令)(Git常用命令)
本文的编写主要参考了以下几位优秀开发工作者的文档及书籍教程:廖雪峰Git教程B站:狂神说Git电子书:GitHub入门与实践【密码:7aik】CSDN博主:mukes1.Git简介1.1.什么是GitGit是目前世界上最先进的分布式版本控制系统;Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目1.2.版本控制版本控制系统(Revision control)是一种在开发的
本文的编写主要参考了以下几位优秀开发工作者的文档及书籍
教程:廖雪峰Git教程
B站:狂神说Git
电子书:GitHub入门与实践【密码:7aik】
CSDN博主:mukes
1.Git简介
1.1.什么是Git
Git是目前世界上最先进的分布式版本控制系统;Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
1.2.版本控制
版本控制系统(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单来说就是更容易协同开发
1.3.版本控制优点
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时降低人为错误
1.4.Git和SVN区别
SVN:集中版本管理
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改;如果连不上网用户就看不到历史版本,也不能做出反应;SVN,CVS,VSS
Git:分布式版本管理
每个人拥有全部代码,所有版本信息仓库全部同步到本地的每个用户,这样就可以查看版本历史,可以离线提交,但增加了本地存储
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
2.安装Git(以Windows为例)
2.1.安装
点击next
Additional icons on the Desktop:添加图标到桌面
Windows Git Git 那三行是添加到鼠标右键菜单
Git LFS:大文件支持
ASSociate.git:关联文件
Associate .sh:关联文件
Check:每天检测版本更新
(NEW!):将Git Bash的配置文件添加到windows终端
下拉可选择默认编辑器
觉得初始化项目的名称:钩选第一项
环境变量(勾选第二项)
选择SSH文件
选择HTTPS后端传输,普通用户默认选择第一项
配置行尾符号转换(第一项)
配置终端模拟器以与 Git Bash 一起使用
选择默认的 “git pull” 行为
不选择凭证帮助程序
额外选项
实验性选项
2.2.查看是否安装成功
点击桌面或者Windows键如果有下面图片相当于安装成功
2.3.安装完成后需要配置git环境
git config --global user.name"xxx" //配置用户名;可以再修改
git config --global user.email"邮箱" // 配置邮箱地址,最好用自己的邮箱地址
所有的配置文件都保存在本地,可以删除再修改
可以在任何地方打开Git Bash 输入以下命令就可以获取具体信息
2.4.创建版本库
版本库又叫仓库;可以把里面所有文件都被Git管理起来,每个文件的修改、删除,Git都能跟踪,以及查询历史
2.4.1.创建文件夹
选择一个合适的地方创建一个文件夹(目录)
$ mkdir xxx xxx是文件夹名称
2.4.2.将目录变为Git可管理的仓库(初始化Git仓库)
$ git init 完毕后系统会在目录下自动生成git的隐藏文件
2.4.3.编写文件
新创建一个文件(可以使用命令touh xxx)xxx是文件名称
2.4.4.将文件添加到仓库暂存区
$ git add xxx xxx是刚刚创建好的文件
2.4.3.将文件提交到仓库
$ git commit -m "my Git file" “”里的内容是描述文件的,可以随便写
到此:这个文件已经被添加到版本库里了
总结(来自廖雪峰)
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
使用命令git add ,注意,可反复多次使用,添加多个文件;
使用命令git commit -m ,完成。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
3.Git神操作
3.1.掌握工作区状态
生活中的常用的文件肯定会被一直修改,下面我们将这个文件修改并保存,现在运行下面命令看看发生了什么
$ git status 会实时掌握仓库的状态
会打印以下效果:
<file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: hh.txt no changes added to commit (use "git add" and/or "git commit -a") ``` hh.txt被修改过了,但还没有准备提交的修改
总结(来自廖雪峰)
要随时掌握工作区的状态,使用git status命令。
—————————————————————————————————————————————————————
3.2.查看修改的内容
如果知道修改了哪些内容就更好了,万能的Git帮我们实现了,输入以下命令
$ git diff hh.txt
会出现以下结果
--- a/hh.txt +++ b/hh.txt @@ -1 +1,3 @@ 1 +2 + 说我们新添加了一个2
这时候就都明白了修改的内容,然后就可以提交了,前面说过的命令
$ git add hh.txt
这时候再查看一下状态
$ git status
会打印下面结果
> On branch main Changes to be committed: (use "git restore --staged > <file>..." to unstage) > modified: hh.txt 它告诉我们,将要被提交的修改包括hh.txt,
下一步,就可以放心地提交了
$ git commit -m'2'
总结(来自廖雪峰)
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
—————————————————————————————————————————————————————
3.3.版本回退
如果我们需要多次修改那个文件,每次修改的内容可能都会清楚的记住,这Git也帮我们实现了
多次修改刚才的文件,然后提交到版本库里,并且执行下面命令(这里有两种方式)
$ git log 命令显示从最近到最远的提交日志,我们可以看到3次提交,
$ git log --pretty=oneline 简化历史信息
简化历史信息输出会出现下面情况
0942243b0e8cdf3193cb5aa51538a5edc2ebf7e1 (HEAD -> main) 3
c3fcbb3adc06c5b1c0094583ddc00967003a9097 2
84538242e3abeea94fd355b993e3192a900ce1a7 1
b5dfd98be4735048ab57c4b27b130c5b368e7782 321
不要惊慌,这是Git的commit id
Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示
如果我想回到上一次修改的文件的地方,应该怎么做,就像穿梭时空一样,使用下面命令
$ git reset --hard HEAD^ 退回一次
$ git reset --hard HEAD^^ 两次就是HEAD^^
这时候输入$ cat hh.txt就能查看有没有回到上一个版本
那么,怎么样返回现在的版本呢,输入下面命令
$ git reset --hard 094224
注意:094224是上面我查询历史信息弹出的commit id(也就是最新的修改)
当然,你也可以吃后悔药,如果你回退到某个版本忘记回来了,但关闭了程序,看不了上面的历史信息id号,你可以使用下面代码就可以实现重回未来
$ git reflog
总结(来自廖雪峰)
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
—————————————————————————————————————————————————————
3.4.工作区和暂存区和版本库
工作区:就是你在电脑里能看到的目录
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。。
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
总结(来自廖雪峰)
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
使用命令git add ,注意,可反复多次使用,添加多个文件;
使用命令git commit -m ,完成。
—————————————————————————————————————————————————————
3.5.文件的四种状态
上面所讲的的第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
—————————————————————————————————————————————————————
3.6.管理修改
Git跟踪并管理的是修改,而非文件
为什么这么说,可以进行以下操作
修改一次文件内容,保存在暂存区,再修改一次文件内容,然后提交
你会发现结果是第一次修改的内容
这说明Git是修改式管理,每次修改都会被记录,第一次修改存在暂存区,第二次修改没有存在暂存区,直接入库,会导致记录不到第二次的修改内容
Git每次修改,如果不用git add到暂存区,那就不会加入到commit中。
—————————————————————————————————————————————————————
3.7.撤销修改
如果在编辑文件时发现出错了,可以直接在文件内修改
从Git窗口查看:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: hh.txt
no changes added to commit (use "git add" and/or "git commit -a")
说的很清楚;$ git checkout – hh.txt 可以丢弃工作区的修改:
但是如果存储在了暂存区;可以把暂存区的修改撤销掉(unstage),重新放回工作区
$ git reset HEAD hhtxt
它可以帮你毁尸灭迹,接着丢弃工作区的修改
$ git checkout -- readme.txt
总结(来自廖雪峰)
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
—————————————————————————————————————————————————————
3.8.删除文件
如果要删除文件可以使用
$ git rm test.txt
接着保存到版本库
但如果误删了且已经入库了,下面代码帮你回到删除前,但只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容
$ git checkout -- test.txt
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
4.远程仓库
在主目录:也就是用户目录里打开.ssh文件。看看有没有id_rsa和id_rsa.pub这两个文件
没有的话执行下面操作
$ ssh-keygen -t rsa -C "youremail@example.com" //你的邮箱地址
有的话就不需要
等到文件夹里面有id_rsa和id_rsa.pub这两个文件时就可以了打开gitee——点击个人主页——个人设置——安全设置——SSH公钥
将id_rsa.pub文件的内容粘贴到公钥,标题随意,点击确定就ok了
添加远程仓库
要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git;
关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名;
关联后,使用命令
git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master
总结:要想把自己本地的代码上传到gitee,可使用下面几步 打开要上传的文件根目录 输入
git add . // 添加所有代码到存储区 git commit -m"描述语言" //提交暂存区代码到本地文件 git remote add origin https://gitee.com/lgh010203/xxxaa.git //https://这个是你要上传的地址,连接到远程地址 git push -u origin ‘master’ //传输文件 注意:如果报错可试试将最后一步写为:git push origin main ```
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
5.分支管理
5.1.创建与合并分支
查看分支:
git branch
创建分支:
git branch <name>
切换分支:
git checkout <name>或者git switch <name>
创建+切换分支:
git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支:
git merge <name>
删除分支:
git branch -d <name>
5.2.解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph
命令可以看到分支合并图。
5.3.分支管理策略
master分支应该是非常稳定的,适合发布新版本
分支不太稳定,版本迭代时,把分支合并到master上
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
5.4.Bug分支
当接到修复bug的任务时,想创建分支修复,但是正在dev进行工作还未提交怎么办
使用stash
功能
首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits)
$ git checkout -b issue-101
Switched to a new branch 'issue-101'
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
$ git switch master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits)
$ git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the 'recursive' strategy.
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
另一种方式是用git stash pop
,恢复的同时把stash内容也删了:
再用git stash list
查看,就看不到任何stash内容了:
$ git stash list
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; 工作区是干净的,刚才的工作现场存到哪去了?用git stash
list命令看看: 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,
修复后,再git stash pop,回到工作现场; 在master分支上修复的bug,
想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
5.5.Feature分支
刚开发了功能,还没来得及合并,要紧急删除
可以通过git branch -D <name>
强行删除。
5.6.多人协作
首先,可以试图用git push origin <branch-name>
推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>
推送就能成功!
如果git pull提示no tracking information,
则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name
origin/branch-name,本地和远程分支的名称最好一致;建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name
origin/branch-name;从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。### 5.7.Rebase
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
6.标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。————廖雪峰
6.1.创建标签
新建标签
git tag xxx
查看所有标签
git tag
历史标签
$ git log --pretty=oneline --abbrev-commit
展示标签信息
git show<tagname>
6.2.操作标签
推送本地标签
git push origin <tagname>
推送全部未推送过的本地标签
git push origin --tags
删除一个本地标签
git tag -d <tagname>
删除一个远程标签
git push origin :refs/tags/<tagname>
7.常用的git命令
里面好多东西都是理解后搬运的,一小部分是自己的总结,但是也足足写了一周,有什么错误请谅解,评论区告诉我
更多精彩点击这里
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)