git 日常使用
1.git介绍
Git是一个开源的分布式版本控制系统。Linus Benedict Torvalds,芬兰赫尔辛基人,著名的电脑程序员,Linux内核的发明人及该计划的合作者,2005年,git的第一个版本正式上线。2周完成Git系统开发
Git是分布式的,SVN是集中式的, git 是单机版的SVN
2.基础命令
1.查看版本
1.git --version
查看日志
git log online
git log --oneline --graph --color --all --decorate
![](https://img.haomeiwen.com/i4734814/61b1d5c829e09d63.png)
2.添加账户和邮箱
git config --global user.name '你的账号昵称'
git config --global user.email '你的账号邮箱'
3.查看git配置信息
git config —list
![](https://img.haomeiwen.com/i4734814/95d7a46ae19cde60.png)
![](https://img.haomeiwen.com/i4734814/6e2920a5aff681a2.png)
4.创建本地仓库,关联到远程仓库
a.创建git仓库
git init
b.添加所有改动的文件到暂存期
git add . 点代表 全部
c.提交至本地仓库
git commit -m "提交的备注信息"
d.本地仓库和远程仓库想关联
git remote add origin https://xxxxxxxx
4.查看远程的源
git remote -v
截屏2023-09-18 16.02.01.png
5.重命名本地分支
git branch -m <oldbranch> <newbranch>
截屏2023-09-18 16.11.06.png
6.拉去远程分支
git pull
git pull --rebase origin master
7.推送到代码到远程分支
git push origin master
git push --f origin master 强制提交
截屏2023-09-18 16.21.21.png
8.查看单前的分支
git branch
git branch -r 查看远程所有分支
git branch -a 查看本地和远程的所有分支
9.创建本地新的分支
git branch dev
10.切换到相应的分支
git checkout dev
10.创建分支的同时切换到该分支
git checkout -b release
截屏2023-09-18 16.37.10.png
11.删除本地分支
git branch -d 'release'
12.将本地分支推送到远程分支
git push origin 'dev'截屏2023-09-18 16.40.49.png
13.查看文件状态
git status
截屏2023-09-20 16.02.39.png
14.暂存代码
git stash
git stash save ‘stash说明信息’
截屏2023-09-18 16.50.38.png
[图片上传中...(截屏2023-09-20 16.01.50.png-c512fc-1695196917569-0)]
14.查看当前缓存列表。
git stash list
截屏2023-09-18 16.52.50.png
15.将stash的内容弹出,默认弹出最上面的那条,即stash@{0} 同时删除恢复的缓存条目。
git stash pop [stash]
16.丢弃stash条目,默认丢弃最上面的那条,即stash@{0},此外还可以在drop后加stash@{n}来指定要丢弃的stash条目。
git stash drop [stash]
17.查看stash的具体内容
git stash show [stash]
git stash show [stash] -p
18.应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},
git stash apply stash@{n}
19.清除所有的stash条目。
git stash clear
20.获取某个分支上的某个commit 提交
git cherry-pick
然而git merge会把一个分支的commits都应用到当前分支,这时候我们可以使用git cherry-pick来完成这一操作,它的作用是选择已存在的commit应用到当前分支上,并产生新的commit SHA-1 校验和。
多个commits
git cherry-pick commit1 commit2
连续多个commits
git cherry-pick commit1..commit8 (不包含commit1 2-8)(2,8]
连续多个commits
git cherry-pick commit1^..commit8 (包含commit1 1-8)[1,8]
发生冲突后 解决冲突再执行
git add .
git cherry-pick --continue
完成 cherry-pick操作
放弃这次cherry-pick
git cherry-pick --abort
21.git版本回退
git reset --soft commit号/HEAD
将本地仓回滚到Y版本,但是暂存区和工作区保持不变。此时本地仓回滚到Y版本号commit完成的那一刻。
截屏2023-09-19 14.04.51.png
截屏2023-09-19 13.43.23.png
git reset --hard commit号/HEAD
本地仓、暂存区、工作区,三区都回滚
截屏2023-09-19 14.07.02.png
![](https://img.haomeiwen.com/i4734814/8f946726ef8140f0.png)
git reset --mixed commit号/HEAD 或者 git reset
本地仓和暂存区,都回滚到Y版本号。工作区代码不受影响
截屏2023-09-19 14.08.10.png
截屏2023-09-19 13.36.55.png
HEAD
HEAD 说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
使用git reflog命令可以帮助恢复git误操作,进行数据恢复
git reflog
截屏2023-09-20 16.07.02.png
22.git rebase 和 git merge
1.merge 和 rebase 的区别:
1.使用merge命令合并分支,解决完冲突,这个时候会产生一个commit。rebase不会产生这个commit
- 使用rebase命令合并分支,解决完冲突,执行git add.和git rebase--continue,不会产生额外的commit。
这样的好处是,‘干净’,分支上不会有无意义的解决分支的commit;
坏处,如果合并的分支中存在多个commit,需要重复处理多次冲突。
3.merge 的提交树是非线性的,rebase 的提交树是线性的(通过重写提交历史)
如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase
如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge
![](https://img.haomeiwen.com/i4734814/0c0702a23fc09fe8.png)
![](https://img.haomeiwen.com/i4734814/6c18232af8bca66c.png)
![](https://img.haomeiwen.com/i4734814/8de53459ecd9c296.png)
- git rebase -i HEAD~3 “HEAD~3” 表示从当前最新的版本号开始,往前的三个版本
![](https://img.haomeiwen.com/i4734814/c4c3299cec86dded.png)
![](https://img.haomeiwen.com/i4734814/2caa3085e84ca815.png)
git tag 标签
git tag -a v1.4 -m "my version 1.4"
git tag -a v1.2 9fceb02 后期在某一个commit打标签
git tag 查看标签
git push origin v1.5 推送一个tag到远程
git push origin --tags 如果想要一次性推送很多标签,也可以使用带有 --tags 选项
git tag -d <tagname> 要删除掉你本地仓库上的标签(注意上述命令并不会从任何远程仓库中移除这个标签,用 git push <remote> )
git push origin --delete <tagname> 直接删除远程标签
git push origin :refs/tags/v1.4
.gitignore 文件
/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
!src/ 不过滤该文件夹
!*.zip 不过滤所有.zip文件
!/mtk/do.c 不过滤该文件
星号 * 代表零个或多个任意字符。例如, *.txt 会匹配所有的 .txt 文件。
问号 ? 代表一个任意字符。例如, ?.txt 会匹配 a.txt 但不会匹配 ab.txt。
两个星号 ** 表示任意中间目录。例如, **/foo 会匹配 foo,a/foo,a/b/foo 等
前缀 ! 表示不忽略。例如, *.txt 和 !important.txt 会忽略所有的 .txt 文件,但不会忽略 important.txt。
前缀 / 表示只忽略当前目录下的文件。例如, /test 会忽略当前目录下的 test 文件,但不会忽略 a/test
后缀 / 表示只忽略目录。例如, test/ 会忽略 test 目录,但不会忽略 test 文件
注意
最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git push origin master