克隆仓库
git clone xxxxxx
-
https 克隆无需设置ssh秘钥拥有仓库权限(能打开代码仓库网页)就能进行克隆【常用】
-
ssh则需要进行秘钥配对才能进行克隆
建立自己的开发分支
方法一:
- 直接在远程仓库中建立好分支,然后拉取一下仓库数据即可建立自己的开发分支并且自动与远端仓库建立联系
- 进入任意分支执行 git fetch 命令
git fetch
- 进入自己开发分支进行开发即可
git checkout feat-login
方法二:
- 直接在本地建立自己分支
git checkout -b feat-footer [创建并进入该本地分支]
- 将远端的felease分支代码拉取到当前本地的feat-footer分支【相当于基于远端的release分支建立了feat-footer分支】
git pull origin release
- 将本地分支代发推送到远端的当前分支
git push origin feat-footer:feat-footer
仓库分支常用操作
创建本地分支并选择
git branch -b 分支名
查看所有的分支
git branch -a
查看当前分支与哪个远端分支关联
git branch -vv
将本地分支与远端建立联系
- 创建分支直接建立关联二合一
git checkout -b 本地分支名 origin/远程分支名
- 单独进行关联
git push --set-upstream origin 远端分支名称
删除已创建的本地分支
git branch -D 要删除的分支名 【在当前分支不可删除当前分支】
删除远端已创建的分支
git push --delete origin 远端分支名称
切换分支
- 命令
git checkout 分支名称
- 图形化操作【vscode 分支可能有延迟记录即使被删除的分支也会显示但是选中不了】
修改本地分支名称【与远端无关联】
git branch -m 旧分支名称 新分支名称 【新旧分支名称有空格】
修改本地分支名称【与远端同名分支已关联】
- 修改本地分支
git branch -m 旧分支名称 新分支名称
- 删除远端分支
git push --delete origin 远端的旧分支名称
- 从新推动当前分支名到仓库的当前分支
git push origin 新分支名称:新分支名称
- 将当前分支与远端分支建立关联
git push --set-upstream origin 远端分支名称
保存当前分支数据操作
保存数据
git add .
书写commit【好的commit记录有时关键时刻可以挽救你的生命!!!!!】
git commit -m 'xxxxxx'
查看数据保存状态
git status
git commit 规范
说明标签(模块名称):描述信息
git commit -m 'feat(login): 登录页面前端完成'
标签用词:
-
feat:新功能(feature)
-
fix:修补bug
-
docs:文档(documentation)
-
style: 格式(不影响代码运行的变动)
-
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
-
test:增加测试
-
chore:构建过程或辅助工具的变动
拉取远端分支代码到当前分支
拉取命令的组成和差别
- git pull [git fetch + git merge]
- git pull --rebase [git fetch + git cherry pick]
方案一:非优雅型
git Pull origin 远端分支名称
- git pull 是 git fetch + git merge 操作
- 是指将远端的分支数据拉取下来然后合并到当前分支,会产生一个Merge操作,造成一个新的commit节点 例如:
- 小明在本地修改了A文件的第十行先推到了远端的测试分支
- 小红在本地也修改了B文件的第十行,当他想要推送到远端分支,要先拉取最新的远端测试分支代码
- 小红:git pull origin feat-test
- 产生了冲突
- 小红解决重头保存时会产生一个commit
- 当小明再次获取远端分支数据到本地时,小红解决冲突的commit也会被小明拉取到【无意间多了很多合并的commit】
方案二:优雅型
git pull origin 远端分支 --rebase
- git pull --rebase 命令是: git fetch + git cherry-pick 远端分支最新的commit
- 是指将远端分支的commit记录全部迁移到你的分支,你的操作是直接将自己的commit记录拼接到远端的commit上,从而减少每次合并时的commit。 例如:
- 小明在本地修改了A文件的第十行先推到了远端的测试分支
- 小红在本地也修改了B文件的第十行,当他想要推送到远端分支,要先拉取最新的远端测试分支代码
- 小红:git pull origin develop --rebase
- 产生了冲突
- 解决完冲突
git add .
git rebase --continue
减少了解决冲突时的commit
撤销操作
git reset [--soft | --mixed | --hard] [HEAD]
git reset【git reset --mixed】[HEAD]
含义:回退到某个版本,并将git状态回退到处于工作区状态,且不会回退工作区代码
git reset --soft [HEAD]
含义:回退到某个版本,并将git状态回退到处于工作区状态,且不会回退工作区代码【退记录不退码】
git reset --hard [HEAD]
含义:直接将本地代码回退到制定的commit位置,工作区代码也直接回退【退记录还退码】
git reset --hard origin/<branch_name>
含义:将本地分支回退到跟远端分支一致的状态【代码、commit都会回退】
回退本地commit且不改变工作区代码【不撤销代码】
回退到某个commit且撤销之前工作区和缓存区代码【撤销代码】
git rebase 命令详解
git rebase -i [HEAD]
- git rebase -i 一般用于修改commit记录【本地commit可以,远端分支勿操作】
git rebase -i HEAD~4
修改一条commit备注信息
git rebase -i HEAD~4
进入vim 编辑模式,修改当前commit的前缀为 r
ESC + :wq
进入vim 编辑 修改当前commit并保存即可
修改成功
合并多条commit到一个commit中
git rebase -i HEAD~4
vim 将其要被合并的commit前缀改为 s 保存即可
git rebase
git rebase --continue
- 合并冲突,结合"git add "命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。
git rebase --abort
- 会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃
git rebase --skip【慎用!!!!】
- 则会将引起冲突的commits丢弃掉(慎用!!)
git log 命令
查看commit log记录
git log
查看所有操作的commit记录
git reflog
将日志输出为txt文本到本地
git log > log.txt
将某一个commit迁移至其他分支
git log 【A分支】
git checkout B分支
git cherry-pick 33100a68236a9a541b7e595c3964118f0dd3f6b2 [要迁移的commit记录ID]
需要切换分支但是不想现在保存commit【git stash】
临时将当前代码保存到暂存区【git stash】
git add .
git stash
git stash pop [恢复到之前的状态]
查看当前临时存储的 stash
git stash list //查看stash 列表
删除某条stash 记录
git stash drop stash@{0}
清除所有的stash记录
git stash clear
代码推动前的必须操作
- 一拉 【git pull origin develop --rebase 】
- 二看 【查看是否有冲突】
- 三解决【要有冲突就解决一下冲突】
- 四验证【解决完冲突重新运行项目,看项目是否正常】