后端技术_分布式版本控制git
最近更新:2024-09-23
|
字数总计:1.7k
|
阅读估时:7分钟
|
阅读量:次
- 基本概念
- 仓库
- 协议
- 配置用户名和邮箱
- 基本概念
- 操作
- 基本操作
- 逆向操作(**)
- 本地仓库整理操作(**)
- 分支操作(**)
- 解决冲突
- 使用规范
基本概念
- git是一个分布式的版本控制工具,重点是分布式,本地仓库+服务器仓库的模式,本地和服务器都存有代码(SVN只保存在远端)
仓库
- 远端仓库
1 2
| git init --bare # 创建一个裸仓库,这样远端的裸仓库即时代码泄露了,也不会有什么问题 #
|
- 本地仓库
1 2 3 4 5 6 7 8 9 10
| # # git clone ssh://mark@192.168.31.98:/home/mark/mathlib # # cd mathlib git config user.name mark git config user.email mark@qq.com # git checkout
|
协议
- http
- ssh
- 一个验证授权的网络协议
- 使用ssh公钥登陆git服务器
1 2 3
| ssh_keygen -t rsa # 本地生成公钥和私钥,找到user文件中的ida_rsa私钥和ida_rsa.pub公钥 # vim authorized_keys
|
- git
配置用户名和邮箱
- 局部
1 2 3 4
| git config user.name mark git config user.email mark@qq.com git config --local -l vim .git/config
|
- 全局
1 2 3 4
| git config --global user.name mark git config --global user.email mark@qq.com git config -l vim C:\User\mark\.gitconfig
|
基本概念

- 本地工作区
- 暂存区(暂存多次修改可以一次性提交到本地仓库去),git add api.h
- 本地仓库
1 2
| git commit add.cc api.h -m "feat:add func" # 指定文件提交 git commit . -m "feat:add func" # add的文件全部提交
|
- 远程仓库
1 2 3 4
| git push origin master # 推送到远端仓库的master分支
# git pull
|
- 版本号
1
| git log # 查看提交日志,可以看到40位的sha1值
|
操作
基本操作
- 暂存 git add
- 提交 git commit
- 推送 git push
- 拉取 git fetch , 只是将远程仓库包含分支的最新commit-id记录到本地文件中,并不会把代码拉取到工作区
- 拉取合并 git pull == git fetch + git merge
- 查看状态 git status
- 查看历史 git log
- git reflog
逆向操作(**)
- index->workspace ,git restore -S sub.cc
- 本地仓库->index
- 本地仓库->workspace
- 本地仓库->null
1 2 3
| git reset --soft head^ # 将commit退回到index, head^表示上一次提交 git reset --mixed head^ # 将commit退回到workspace git reset --hard head^ # 将commit直接删掉,好像没编辑过一样
|
- workspace->null, 此时修改过的内容,我都不想要了
1 2 3
| git checkout . # 当前目录所有的,新建的文件不会删掉,但是修改过的文件已经还原了,新建的文件需要手动删除 # git checkout -f .
|
本地仓库整理操作(**)
- 整理上一次提交
1
| git commit --amend # 复用上一次的提交,直接将新add的代码合并到之前的一次commit中
|
- 整理多次提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # # # # git rebase -i # h1 h2 ,左开右闭区间来选择版本号,不写表示最新的两次 # # vi sub.cc # 修改我们的代码,添加想添加的内容 git add sub.cc git commit --amend # 合并到rebase1中 git rebase --continue # 继续整理,如果没有文件需要整理,则返回到master分支状态,即整理完成
# # # # git rebase -i # # #
|
- 注意整理操作一定要在没有人基于你的分支开发的基础上进行
- 每一次整理操作,commit-id都会发生改变,别人依赖你,那么会变成依赖一个不存在的提交
分支操作(**)
- 查看分支 git branch(本地) git branch -a(本地+远端)
- 创建分支
1 2 3 4
| git branch develop # 虽然创建了本地的新分支,但是并不会切换过去 git checkout develop # 切换分支 git switch develop # 由于checkout功能太多了,新增加的切换分支命令 git checkout -b develop # 创建同时切换过去
|
- 合并分支
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| # ipB$ git checkout -b develop ipA$ git checkout master ipA$ vi api.h ipA$ git add . ipA$ git commit -m "feat: add func" ipA$ git push origin master
ipB$ git checkout develop ipB$ vi api.h ipB$ git add . ipB$ git commit -m "feat: sub func" # ipB$ git checkout master ipB$ git pull ipB$ git checkout develop ipB$ git merge master # ipB$ vi api.h # # # # # # ipB$ git add . ipB$ git commit . -i -m "fix: merge master" ipB$ git checkout master ipB$ git merge develop ipB$ git push origin master
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| # ipB$ git checkout -b develop ipA$ git checkout master ipA$ vi api.h ipA$ git add . ipA$ git commit -m "feat: add func" ipA$ git push origin master
ipB$ git checkout develop ipB$ vi api.h ipB$ git add . ipB$ git commit -m "feat: sub func" # ipB$ git checkout master ipB$ git pull ipB$ git checkout develop ipB$ git rebase master # ipB$ vi api.h # # # # # # ipB$ git add . ipB$ git rebase --continue ipB$ git checkout master ipB$ git merge develop ipB$ git push origin master
|
- 使用git merge会比rebase多一次提交
- 不要在别人依赖你的分支时使用rebase
- 删除分支 git branch -d develop(本地) git push origin -d develop(远端)
解决冲突
- 产生原因:不同分支修改了同一文件的同一行或者相邻行
- 解决原则:不要影响其他人提交的功能,也不能破坏自己提交的功能;协商解决;
- 解决:1. merge;2. rebase;
使用规范
- master
- release
- develop
- hotfix
- feature
- bug
2024-03-30
该篇文章被 Cleofwine
归为分类:
服务端