git实用手册(持续更新)
1. git简介
没错,它只是一个工具,学会用很重要。git是一个分布式版本控制软件,最初Linux内核的作者Linus Torvalds制作,最初目的为了更好的管理Linux内核代码而设计。
- 工作区( working directory):下载远程仓库到本地后,文件被修改后处于工作区;可以使用
git status
命令查看工作区中文件。 - 暂存区(staged):执行
git add file
命令将会使工作区被修改文件添加到暂存区,这一步是让作者把将要提交文件先一次性选择好。 - git commit:
git commit -m "xx"
命令将会提交暂存区所有文件的修改,并生成一个commit提交记录,此时提交还在本地仓库。 - 提交修改到线上:
git push origin branch_name
命令会提交本地仓库的commit到远程仓库,branch_name是本地仓库所在分支名称。 - 暂存区不属于任何分支、暂存区清空后,本地仓库才能进行切换分支操作。
- HEAD指针:
2. 常用命令
git reset 回退撤销修改
HEAD^ 可以用来指定当前的commit_id;HEAD^^代表上一个commit_id;依次推类。
命令 说明 git reset HEAD file 撤销某个文件的git add, 修改回到工作区 git reset –soft commit_id 撤销commit操作,修改回到暂存区 git reset –mixed commit_id(–mixed参数可以省略) 撤销commit和add操作,修改回到工作区 git reset –hard commit_id 撤销commit和add操作,删除工作空间改动代码(慎用) git status 查看本地仓库状态
git rebase 用法小结
2.1 本地仓库关联多个远程仓库
当远程仓库地址迁移后,本地仓库可关联新的远程仓库地址,旧地址依旧保留。
- origin 重命名为 old_origin:
git remote rename origin origin_old
- origin 默认关联到 新的远程仓库:
git remote add origin new.git
- 本地修改提交到新远程仓库:
git push origin msater
- 本地修改提交到旧远程仓库:
git push old_origin msater
3. 分支管理
项目开发过程中,一般分为稳定发布分支master、开发分支develop、功能分支feature、Bug修复分支bugfix_xxx等四种类型。
分支管理基本流程图 https://nvie.com/posts/a-successful-git-branching-model/
分支合并规范(建议)
commit描述尽可能详细, 推荐使用commitizen插件,
git cz
代替git commit
;配置参考文章 如何优雅的提交commit
git cz 将commit描述分为简要描述和详细描述两个部分,以及一些修改对版本兼容性说明。
git merge时请慎用 –squash 参数,–squash会将多个commit合成一个,这不便于后续版本修改记录查看和代码维护。如果开发过程中commit节点提交的太零散,可以采用
git rebase -i
命令整合commit,然后采用fast forward行为合入。其他待补充
4. git 子仓库
在日常开发中,我们经常git来当做代码版本管理工具,使用中基本都是一个项目一个Git仓库的形式,那么当我们的代码中碰到了业务级别的需要复用的代码,我们一般怎么做呢 ? Git子模块允许我们将一个或者多个Git仓库作为另一个Git仓库的子目录,它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。
向父仓库添加子仓库:
git submodule add https://github.com/xxx.git
如下图,iot_project 为父仓库,执行命令后,子仓库将以子目录的形式存在;父仓库将会新增.gitmodules和子仓库目录。
子仓库有修改后,父仓库如何感知?如下只是以子目录的形式提示,不显示细节。
1
2
3
4
5
6
7zhaocs@DESKTOP-2J12679 iot_project [develop] $ git status
On branch develop
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: os_algorithm (new commits)clone 父仓库后,怎么拉取子仓库内容?
git submodule update --init --recursive
1
2
3
4
5
6
7seedeer@DESKTOP-70ULORM:~/Study/iot_project$ git submodule update --init --recursive
Submodule 'os_algorithm' (https://github.com/SeeDeer/os_algorithm.git) registered for path 'os_algorithm'
Submodule 'os_time' (https://github.com/SeeDeer/os_time.git) registered for path 'os_time'
Cloning into '/home/seedeer/Study/iot_project/os_algorithm'...
Cloning into '/home/seedeer/Study/iot_project/os_time'...
Submodule path 'os_algorithm': checked out 'ee81fccef733738ac643feb89960849b7c888827'
Submodule path 'os_time': checked out '0a058507b2f4ab19ab75993c1da2bb7a93105d66'批量查看子仓库修改:
git submodule foreach git status
替换子模块的url 为 ssh方式
手动修改 .gitmodules 文件中 url
使用 git submodule sync 命令,将新的URL更新到文件.git/config
5. 附录
5.1 免密操作配置
和git远程仓库交互时有https和ssh两种方式,如果每次提交都要输入账户登陆密码将会很繁琐。
https方式免密码操作配置:
1
2git config --global user.email "你的git的注册邮箱"
git config --global user.user"你的git用户名然后输入一次用户密码,再根据自己的需求执行下面的任意一条命令:
1
2
3
4
5
6
7
8
9
10
11
121、设置记住密码(默认15分钟):
git config --global credential.helper cache
2、如果想自己设置时间,可以这样做:
git config credential.helper 'cache --timeout=3600'
这样就设置一个小时之后失效
3、长期存储密码:
git config --global credential.helper store
4、增加远程地址的时候带上密码也是可以的。(推荐)
http://yourname:password@git.oschina.net/name/project.gitssh方式免密操作配置:
同上:git config –global先设置,然后ssh客户端本地生成ssh key,进入用户下
.ssh
目录下执行ssh-keygen -t rsa
, 然后一路回车确认即可。将ssh key中的公钥内容配置到ssh服务器上,github网站配置方法如下:进入账户设置
认证情况测试:
ssh -T git@github.com
xxx
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!