本地仓库的搭建
#新仓库
git init
#克隆仓库
git clone +url
更改暂存区
新建文件后,要将修改过的文件放到暂存区,再放到本地仓库,再是远程仓库。
必须先放暂存区再放本地仓库
查看所有文件状态
git status
添加所有文件到暂存区
git add .
添加file文件到暂存区
git add file
提交暂存区中的文件到本地仓库 -m 提交信息
git commit -m "这是注释"
移除添加到暂存区中的文件
git restore -- staged file
取消上一次操作
git reset HEAD file
版本回退
取消上一次操作
#回退多次用~,一次用^
git reset --hard HEAD~2
文件删除
- 在本地删除后,直接git commit -m
- git rm file
不常用的指令
#查看日志信息
git log
#查看比较的是工作区中的文件与版本库中文件的差异。
#HEAD指向的是版本库中的当前版本,
#而file指的是当前工作区中的文件。
git diff HEAD -- file
文件的四种状态status
status只能看暂存区的文件状态
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
- Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致,文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
git分支中常用指令:
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释
*.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
本地分支操作
远程分支操作
标签管理
学习视频
- https://www.bilibili.com/video/BV1FE411P7B3?p=10
- https://mp.weixin.qq.com/s/Bf7uVhGiu47uOELjmC5uXQ