git应用笔记
安装
- 阿里云下载Git
- 选择安装目录时尽量不选在C盘

- Git组件安装,一般默认即可

- 选择开始菜单文件夹,默认
- 选择Git默认编辑器,一般是vim。默认就行
- 选择默认分支名

- 选择环境变量,选第二个

- 选择SSH,默认
- 选择HTTPS,默认
- 配置尾行符,默认
- 配合git bash一起使用,默认
- git pull行为,默认
- 凭证管理,选第一个

- 默认
- 默认
- 执行安装。
- 安装成功后,使用
git bash打开git
git command
- Git练习
git commit:提交代码,把原来的代码变更并提交到仓库,基础节点叫做parent。原来的基础节点并不会被删除,类似复制粘贴

git branch <分支名>创建分支,用git checkout <分支名>切换到现有分支(*表示当前所在分支)。

git merge:把分支合并到主线路- 创建分支
git branch bugFix - 切换分支
git checkout bugFix - 提交
git commit - 切换到
git checkout main - 提交
git commit - 用
git merge <分支名>把两个分支合并
- 创建分支

git rebase:不同于git merge 的另外一种合并方法- 创建分支
git branch bugFix - 提交
git commit - 切换到
git checkout main,再提交git commit - 切换到
git checkout bugFix,rebase到main
- 创建分支

git详解
-
安装:
- 在debian或者ubuntu下 :
sudo apt-get install git
- 在debian或者ubuntu下 :
-
配置
git config --global user.name
git config --global user.email
- 创建版本库并添加文件到仓库:
# 创建版本库文件夹
mkdir learngit
cd learngit
pwd #显示当前目录
- 把该文件夹变成可以管理的仓库:
# 会生成一个.git的文件,做版本管理用,git使用的前提是被.git管理起来;用ls-ah 查看该文件
git init
- 新建一个文本readme.txt,放到learngit下;把一个文件放到git仓库需要以下两步:
# 把文件添加到仓库,这一步是把文件添加到仓库暂存区
git add readme.txt
# 一次性添加所有已经修改的文件
git add -u
# 一次性添加所有已删除的文件
git add -A
# 添加所有未跟踪的文件
git add .
# 真正把文件提交到仓库
git commit -m "本次提交的说明"
- 为什么需要add和commit两步的原因是:commit可以一次性提交很多文件,所以在commit之前可以多次add:
git add file1.txt
git add file2.txt
git add file3.txt
git commit -m "一次性提交上面三个文件"
-
添加某个文件时,必须先保证文件在当前目录下存在,用ls或者dir命令查看当前目录的文件是否存在或者名称是否正确
-
比较和追踪文件状态
# 可以查看当前仓库的状态,比如仓库里的文件被修改了,但是还没有被add到仓库暂存区
git status
# 详细查看某个被修改的文件的不同(和commit的文件相比)
git diff readme.txt
# 比较完不同之后就可以放心添加到暂存区了,提交修改也是用add,和提交新文件一样
git add readme.txt
# 在add之后commit之前再看一眼status,会告诉我们将要被提交的文件包括readme.txt(这时还存在暂存区)
git status
git commit -m "提交readme.txt的修改"
# 在commit之后再看一眼状态,会告诉我们当前没有需要提交的修改,工作目录(working tree)是干净的
git status
- 版本回退:
- 我们之前的每一次commit就相当于是一次“快照”,所以找到之前的提交记录,就可以回退到某一次提交的版本。
# 查看commit的历史记录,会输出所有被记录过的改动,这里会有个HEAD指针
git log
# 一次提交记录占用一行输出(省略作者和日期那些不重要的信息,只保留SHA计算出来的值)
git log --pretty=oneline
# git中,HEAD指向的版本就表示当前版本。上一个版本是HEAD^;上上个版本是HEAD^^;往上100个版本是HEAD~100
# 退回到上一个版本
git reset --hard HEAD^
# 使用reset之后,查看状态发现最新的变成了上一次修改的版本了
git status
- 如果回退之后,又想恢复。那么只要命令行窗口还没有被关掉,只要向上找到想要恢复那个版本的SHA号。执行如下指令:
# SHA号不用填完,可以填个4或者5位,git会自己去模糊搜索。
git reset --hard <sha>
# HEAD指向哪个版本,当前版本就是哪个
# 如果SHA已经找不到了,如下方法可以恢复:
# 这条指令记录了使用者对git操作的每条命令,从这个指令的内容中找到已经回退掉的SHA和版本号
git reflog
# 找到之后就可以恢复了
git reset --hard <sha>
-
工作区和暂存区
- 工作区:就是在电脑磁盘上就能看到的目录
- 版本库:生成的.git其实就是一个版本库,他不算工作区。
- git的版本库里面存了很多东西,其中最重要的就是暂存区,称作
stage(或者index);git里面为我们自动创建的第一个分支叫做master;指向master的指针叫做HEAD git add就是把文件修改添加到了暂存区git commit就是提交更改,实际上是把暂存区的内容提交到了当前的分支;注意提交的只有暂存区里存在的东西。- 在只有一个分支的情况,简单理解就是我们把所有的文件全部放到了暂存区,然后一
次性提交了暂存区的所有修改 - 一旦提交(commit)过后,如果你又没有对工作区做任何修改,那么
工作区就变得干净了 - commit以后,
暂存区的内容就为空了。
-
撤销:
- 情况1,如果是在工作区的文件被修改了,但是还没有提交到暂存区,有两种解决方案:
- a.手动删除掉。
- b.使用
git checkout -- readme.txt,可以丢弃工作区的修改 - 如果暂存区有该文件的上一个版本,则退回到当添加到暂存区时的状态
- 如果暂存区内没有文件,则退回到上一次commit时的状态
总之,就是让当前文件回到最近一次 git commit或者git add时的状态- 注意
checkout后面如果不加 -- file 的话,就变成了切换分支的命令
- 情况2,工作区的修改已经被提交到暂存区了:
git reset HEAD readme.txt:git reset既可以做版本回退,也可以用来把暂存区的东西撤销到工作区,撤销之后暂存区就是干净的了。git checkout -- readme.txt:丢弃工作区的内容
- 情况3,暂存区的内容已经被提交到仓库了:
- 本地仓库,用
git reset --hard HEAD^退回版本 - 远程仓库,完蛋
- 本地仓库,用
- 情况1,如果是在工作区的文件被修改了,但是还没有提交到暂存区,有两种解决方案:
-
删除:
rm test.txt:直接删除工作区的文件,但是如果提交了的话,仓库还有记录git status:直接告诉你工作区哪个文件被删除了- 如果正常删除,就
先add再commit,把变更同步到仓库 - 如果删错了,因为版本库还有,所以用:
git checkout -- test.txt恢复。 - 从这里看出来,git checkout -- file 其实是
用版本库里的内容替换掉工作区中的内容,如果版本库没有改文件,那就是丢弃工作区该文件的修改方式了。
-
远程仓库:
git remote add origin <远程仓库SSH地址>:origin是远程仓库的名字,也可以换成其它名字;这一步是在关联远程仓库git push -u origin master:把本地的内容推送到远程,实际上是把当前分支master推到远程库,第一次用 -u,就把本地master和远程master管理,以后就可以不用加-u了。git push origin mastergit remote rm origin:解除本地和远程仓库的绑定,并没有删除远程仓库的内容git clone <远程仓库SSH地址>:把远程仓库在本地克隆一个一样的
-
分支管理:
- 分支管理就是多人协作时,各自在自己的分支上干活,互不干扰
- 直到开发完毕,一次性合并到原有分支上,高效又安全
- 如果出现分支合并冲突的时候git就希望我们先手动解决冲突(人工确认更改需求),冲突解决后再合并
#创建分支,然后切换分支
git branch dev
git checkout dev
#用一句话代替上面两句话,创建并切换分支
git checkout -b dev
#查看当前分支
git branch
#把dev分支的改动和当前所在分支合并
git merge dev
#合并之后,就可以放心删除没有用的dev分支了
git branch -d dev
# 如果出现分支合并冲突的时候git就希望我们先手动解决冲突,冲突解决后再合并
# 可以查看分支合并图
git log --graph
git实际项目应用
#添加远程仓
git remote add origin <远程仓库SSH地址>
#从远程主分支拉取代码到本地,只会拉取到本地当前所在分支,并不会为本地建立一个和远程同名分支
git pull origin main
#从终端快速进入目标文件夹
ls #查看文件目录
cd ./路径名前几字符+TAB键 #TAB键可以联想出完整路径名
cd .. #退回上一级目录
#正式项目使用上,一般不允许直接把本地修改后的文件推送到Main。这时本地需要新建一个其他分支并切换到该分支,然后把本地代码推到远程该分支下,再手动去远端仓库,点击merge请求,添加审阅人和批准人。审阅和批准完成之后才能由审阅同事点击merge确认。
#远端仓库手动merge完成后,远端仓库将不会出现刚才新建的分支,因为已经被合并。
git add . #添加所有改动到暂存区
git commit -m "" #提交更改,实际上把暂存区的内容提交到了当前本地分支
git branch -a #列举出所有本地和远程的分支名,不加 -a 则表示列举出本地分支名
git checkout -b <分支名> #新建并切换到当前分支,如果分支已存在,则去掉 -b,直接切到目标分支
git push origin <分支名> #把本地改动推送到远程分支上
#当本地推送的分支远程不存在时:远程会直接建立一个和本地同名的分支。
#当远程拉下一个本地不存在的分支时:本地会把远程分支的内容存到本地当前所在分支,而不会新建一个分支。
#当远程分支名和本地分支名不同时,拉下远程分支:内容会保存在当前所在本地分支中。
#在本地新建分支:如果某个时间点在当前分支下新建一个分支,那么新的分支会和这个时间点当前分支的代码保持一致。如果在下一个时间点,突然想回到另一个分支,那么里面的代码也会回到该分支下最新的代码。

浙公网安备 33010602011771号