git 方法 :
第一次拿到项目 :
1. 设置提交代码的用户名和电子邮件地址(不重要)
这两个命令不重要,知道就好,一次性操作
git config –global user.name “[name]”
git config –global user.email “[email address]”
2. 第一次从github/GitLab上拉代码 (不重要)
一次性操作,知道就好
git clone [url] 该命令可用于通过指定的URL获取一个代码库。
3. 正常开发阶段 (重要)
每一个项目正常都会有一个master分支或者develop分支 ,这两个分支一般不在上面的进行开发,我们自己会创建自己的分支来进行开发。
创建并跳转分支 git checkout -b 分支名 这边的分支名一般以任务名来命名
正常进行开发,每天开发记得要提交代码,在提交代码前,要记得在本地保存(commit)自己的代码
本地commit自己的代码 步骤
**git status ===> git add . ===> git commit -m ‘干了什么’ **
git status 该命令将显示所有需要提交的文件
git add . 将多个文件添加至stage(暂存区)
git commit -m ‘干了什么’ 在版本历史记录中永久记录文件
完成以上三步,还需要拉一下远程仓库当前分支的最新代码,如果这个分支是你一个人在用,这一步可以省略,如果是多人开发,再同一个分支,一定要拉代码。
git pull origin 分支名 该命令是拉取远程分支的代码
此时拉取下来的代码可能会有冲突 ,那就要继续解决冲突,解决冲突可以用viscode的工具 ,解决完冲突之后,需要重新走一遍 (git status ===> git add . ===> git commit -m ‘干了什么’ ),走完这个之后,就可以安心提交代码了
git push origin 分支名 提交代码
4. 其他操作 (重要)
跳转分支 git checkout 分支名
查看分支 git branch
删除分支 git branch -D 分支名
合并分支 git merge 分支名
查看 两个分支的不同 git diff 分支名 分支名2
查看当前分支所有的commit git log
查看git 所有的操作 git reflog
回退版本 git reset --hard 版本号
修改上一个提交 git commit --amend
查看文件每一行的提交人 git blame filename(文件路径)
git blame filename -la,b(指定行数)
5. 特殊情况(重要)
- 拉取远程仓库中的某个分支
远程仓库中有一个分支a,在自己本地环境没有,你不能基于自己所有在的develop分支,在创建这个分支出来a,然后再git pull origin a 这种做法是有风险的(具体风险就不说了,容易出问题)
正确的做法
先 git fetch 然后 git checkout 分支名
git fetch 这个命令将某个远程仓库的更新全部取回本地
git fetch 和 git pull的区别:
git pull = git fetch + git merge
git fetch 相当于把远程仓库的文件同步到了本地仓库中,并没有同步到工作目录中,所以此时需要merge 一下,而 git pull 相当于把远程仓库的文件同步到了本地仓库和工作目录中。
- 忽略文件改动,不进行提交 git update-index --assume-unchanged 文件名
作用:忽略文件的改动,但是不加入.gitignore 文件中,这样可以达到仅在本地目录中忽略,不影响其他团队成员的工作。
-
更改本地commit名字 git commit --amend
-
修改分支名 git branch -m oldbranch newbranch
-
git rebase 合并分支
自己所在的分支myBranch,更新develop主线上的东西到该分支上: git rebase develop
git rebase 和 git merge 的区别:
两个使用场景是不一样的,merge只是合并另外一个分支的内容,rebase也合并另外一个分支的内容,但是会把本分支的commits顶到最顶端
6.git stash
应用场景
在开发分支上干活,突然接到紧急bug,需要到主分支上修改。 开发分支的功能才开发一半,一般情况会先commit 一下 ,再跳到主分支上。但是又不想commit ,因为commit 过后,会有记录(无关记录)。所以这个时候就可以先stash一下,把开发到一半的代码存到stash中 ,然后在切换到主分支上修改bug,修改完之后再回到开发分支,git stash apply之前的存储,继续开发,这样就不会产生无用的commit
常用命令
git stash push -m ‘名字’ 将当前修改保存在stash中
git stash list 查看stash 中有哪些存储
git stash pop 将某个存储从stash释放出来 ,并且删除stash这个存储(不推荐使用)
如果要应用并删除其他stash,命令:git stash pop stash@{$num}
git stash apply 将某个存储从stash释放出来 ,但并不会删除stash中这个存储(推荐使用)
如果要应用某个特定的存储,命令 : git stash aplly stash@{$num}
git stash clear 清空stash中所有的存储
注意点:
使用git stash 之前必须要先git add . 只要被git 管理起来的文件才能被git stash
7.如何删除已经提交到远程仓库的commit
方案1:
git reset --hard commit_id(id为你想回到的版本id)
git push -f
方案2:
git reset --hard commit_id
git push origin HEAD --force
8. 只提交 某个单独的文件
git commit <file> -m "your comment"
不需要先git add,执行后,直接git push即可
文件名 添加需要提交的文件名(加路径–参考git status 打印出来的文件路径)
9. git 初始化本地项目并推送到远程
-
切到项目根目录中
-
初始化git仓库并在本地提交
git init
git commit -m "init project"
- 把本地仓库和远程关联,并推送到远程
//与远程仓库关联
git remote add origin 远程仓库地址
//推送到远程仓库
git push -u origin master
分享一个知识点, 打个比方,如果要在自己分支(xuzp)合并wy的分支(wangy) 的1.txt 文件,可以先切换到自己分支 git checkout xuzp ,然后用git checkout --patch wangy 1.txt,把wy分支上的1.txt文件合并过来~
远程仓库项目较大,拉不下!(fatal: early EOF)
git clone命令时报错:fatal: early EOF
- 执行部分clone: git clone --depth 1 url克隆的地址
- 如果起作用了,clone剩下的代码: git fetch –unshallow
- 以后执行常规操作就行了 : git pull –all
git clone --depth=1 只克隆下包含最近一次commit的一个分支,这样这个项目文件就不会很大
10 git 查看 某一个commit 修改内容
git show *************(commit 的hash 值)
11 git rebase
git rebase 变基
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UBBQRpip-1645961365142)(asset\git\rebase.jpg)]
git rebase 和git merge的异同之处如下
(1)两者都可以用于本地代码合并
(2)git merge 保留真实的用户提交记录,且在merge时会生成一个新的提交
(3)git rebase 会改写历史提交记录,这里的改写不仅限于树的结构,树上的节点的commit id也会别改写,收益是可以保证提交记录非常清爽
git rebase 和git merge的异同之处如下
(1)两者都可以用于本地代码合并
(2)git merge 保留真实的用户提交记录,且在merge时会生成一个新的提交
(3)git rebase 会改写历史提交记录,这里的改写不仅限于树的结构,树上的节点的commit id也会别改写,收益是可以保证提交记录非常清爽
12. 强推代码
git push origin 分支名 -f
13.tag
git tag //显示默认列表
git tag tag名 //创建tag
git tag -a tag名 -m ‘注释信息’ //创建tag 并添加注释
git show v1.0.0 //v1.0.0为tag名称
git push origin --tags //推送所有tag到远程仓库
git push origin :refs/tags/tag名 // 删除远程仓库tag
git tag -d tag名*// 删除本地tag*
git tag -l | xargs git tag -d // 删除所有本地分支
git fetch origin --prune // 从远程拉取所有信息
14.提交规范
feat
增加新功能fix
修复问题/BUGstyle
代码风格相关无影响运行结果的perf
优化/性能提升refactor
重构revert
撤销修改test
测试相关docs
文档/注释build
对构建系统或者外部依赖项进行了修改chore
依赖更新/脚手架配置修改等workflow
工作流改进ci
持续集成types
类型定义文件更改wip
开发中
返回上一次提交,并且保留提交前的代码
git reset --soft HEAD~1