git笔记
1. 安装
- 阿里云下载Git
- 选择安装目录时尽量不选在C盘
- Git组件安装,一般默认即可
- 选择开始菜单文件夹,默认
- 选择Git默认编辑器,一般是vim。默认就行
- 选择默认分支名
- 选择环境变量,选第二个
- 选择SSH,默认
- 选择HTTPS,默认
- 配置尾行符,默认
- 配合git bash一起使用,默认
- git pull行为,默认
- 凭证管理,选第一个
- 默认
- 默认
- 执行安装。
- 安装成功后,使用
git bash
打开git
2. 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
- 创建分支
3. git应用
安装:
- 在debian或者ubuntu下 :
sudo apt-get install git
- 在debian或者ubuntu下 :
配置
1
2git config --global user.name
git config --global user.email创建版本库并添加文件到仓库:
1
2
3
4# 创建版本库文件夹
mkdir learngit
cd learngit
pwd #显示当前目录把该文件夹变成可以管理的仓库:
1
2# 会生成一个.git的文件,做版本管理用,git使用的前提是被.git管理起来;用ls-ah 查看该文件
git init新建一个文本readme.txt,放到learngit下;把一个文件放到git仓库需要以下两步:
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 把文件添加到仓库,这一步是把文件添加到仓库暂存区
git add readme.txt
# 一次性添加所有已经修改的文件
git add -u
# 一次性添加所有已删除的文件
git add -A
# 添加所有未跟踪的文件
git add .
# 真正把文件提交到仓库
git commit -m "本次提交的说明"为什么需要add和commit两步的原因是:commit可以一次性提交很多文件,所以在commit之前可以多次add:
1
2
3
4git add file1.txt
git add file2.txt
git add file3.txt
git commit -m "一次性提交上面三个文件"添加某个文件时,必须先保证文件在当前目录下存在,用ls或者dir命令查看当前目录的文件是否存在或者名称是否正确
比较和追踪文件状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 可以查看当前仓库的状态,比如仓库里的文件被修改了,但是还没有被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就相当于是一次“快照”,所以找到之前的提交记录,就可以回退到某一次提交的版本。
1
2
3
4
5
6
7
8
9
10
11
12
13# 查看commit的历史记录,会输出所有被记录过的改动,这里会有个HEAD指针
git log
# 一次提交记录占用一行输出(省略作者和日期那些不重要的信息,只保留SHA计算出来的值)
git log --pretty=oneline
# git中,HEAD指向的版本就表示当前版本。上一个版本是HEAD^;上上个版本是HEAD^^;往上100个版本是HEAD~100
# 退回到上一个版本
git reset --hard HEAD^
# 使用reset之后,查看状态发现最新的变成了上一次修改的版本了
git status
- 我们之前的每一次commit就相当于是一次“快照”,所以找到之前的提交记录,就可以回退到某一次提交的版本。
如果回退之后,又想恢复。那么只要命令行窗口还没有被关掉,只要向上找到想要恢复那个版本的SHA号。执行如下指令:
1
2
3
4
5
6
7
8
9
10
11# 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 master
git remote rm origin
:解除本地和远程仓库的绑定,并没有删除远程仓库的内容git clone <远程仓库SSH地址>
:把远程仓库在本地克隆一个一样的
分支管理:
- 分支管理就是多人协作时,各自在自己的分支上干活,互不干扰
- 直到开发完毕,一次性合并到原有分支上,高效又安全
- 如果出现分支合并冲突的时候git就希望我们先手动解决冲突(人工确认更改需求),冲突解决后再合并
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#创建分支,然后切换分支
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笔记
http://example.com/2024/07/21/git笔记/