Git笔记
Git笔记
小树该笔记参考自菜鸟教程|Git 教程、技术蛋老师|Git工作流和核心原理 | GitHub基本操作 | VS Code里使用Git和关联GitHub
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
基本概念
- 工作区:电脑中实际看到的项目
- 暂存区:英文叫 stage 或 index。一般存放在
.git
目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index) - 版本库:每次提交之后的记录
可以使用git add
命令将文件提交到暂存区:
1 | git add filename # 将单个文件添加到暂存区 |
当完全准备完成之后,可以一口气将暂存区中的文件提交到本地的版本库中:
1 | git commit -m "Commit message" # 将暂存区的更改提交到本地版本库 |
之后再使用git push
将本地仓库推送到远程仓库中:
1 | git push origin branch-name |
几个比较重要的文件状态
- 工作区内文件
- 未追踪:untracked、unstage
- 暂存区内文件
- 已追踪:stage
初始化本地Git
git config全局设置
1
2
3git config --global user.name "username" # 设置用户名
git config --global user.email username@emailadress # 设置用户邮箱
git config --global init.defaultBranch main # 设置本地默认分支为`main`本地git仓库操作
1
2
3git init # 在本地仓库开启版本控制
git status # 查看git信息
git log # 查看git的版本信息
下面是git status
试例
1 | On branch main # 当前正处于主分支 |
.gitignore
文件的作用:该文件内的文件将不会被提交到git中,可以是单个文件,也可以是一个文件目录
1 | .DS_Store |
git中的分支
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
查看本地存在的所有分支:
1 | git branch name |
创建新分支:
1 | git switch -c name # 创建一个分支,并且跳转到该分支上 |
以下似乎在新版本的git中不推荐使用:
1 | git branch name # 只创建,并不会直接跳转到该分支 |
改变某一分支的名字:
1 | git branch -m name # 修改当前某一分支名 |
切换到该分支:
1 | git checkout name |
删除某一分支:
1 | git branch -d name # `d`代表delect |
合并分支:
1 | git merge name # 注意是从别的分支合并到当前分支 |
GitHub/GitLab操作
直接使用Download ZIP
是没有版本控制功能的,应当使用git clone
1 | git clone link.git |
查看本地仓库和哪些远程仓库源有联系:
1 | git remote # 只会显示远程仓库的别名 |
这里的origin
表示的是远程仓库的名字,默认都会使用origin
来表示远程仓库的名字:
1 | git remote |
添加远程仓库别名:
1 | git remote add origin link # 其中`origin`是仓库的别名,可以自定义,但一般为`origin`;`link`则为远程仓库的地址 |
更新本地与远程仓库:
1 | git push |
在2021年GitHub已经取消了使用用户名和密码进行push
,在这里我们需要去设置Token
或者使用GitHub CIL
更新远程代码到本地:
1 | git fetch |
此时可以查看本地和远程仓库的区别:
1 | git diff origin/main |
确认可以同步之后,将远程仓库和本地仓库整合起来:
1 | git pull |
一般来说,应该先将远程仓库中的内容同步到本地:
1 | git pull origin main |
如果拉取的时候出现了冲突,可以尝试使用--rebase
,这里的操作是先将远程的仓库拉到本地,远程仓库的commit变为老的一条,本地的commit则变为最新的一条
1 | git pull --rebase origin main |
将本地仓库的main
分支同步到远程仓库中,本地文件夹名和仓库名可以不一样
1 | git push origin main # 制定同步的仓库和分支 |
Issue
在commit
的时候可以添加#1来制定专门针对与某一Issue的提交
1 | git commit -m "针对#1" |
Pull Request / Fork
在尝试pull request
之前,需要自己先创建一个与main
不同的分支,之后再进行pull
操作
1 | git pull origin new-branch # 此时`new-branch`即指定的新分支名 |
在成功pull request
之后,GitHub会自动删除该分支,但是本地并不会自动删除该分支new-branch
,此时正确的操作应该是:
- 先将远程的内容拉取下来
git pull
,先更新本地的main
分支 - 再删除
new-branch
小分支,git branch -d new-branch
,注意最好不要使用-D
这种参数强制删除,容易犯错误!
fork
类似于将别人的仓库拷贝到自己的仓库,在进行fork
操作前,此时应该:
- 先创建一个新的分支,一切操作将在这个新分支内完成,接着
add
、commit
,一些操作应该按照原仓库作者的规范 - 再进行
push
Tag / Release
tag
标签类似于版本号,用来表示某一阶段的工作的完成,tag
就像照片一样,记录着那一刻的commits
记录
1 | git tag -a v1.0.0 -m "comment" # 这里的`a`是`annotation`,注解的意思 |
release
的发行版其实是基于tag
标签的