基础概念
工作区working directort:一个git代码库编中的文件辑过后,任何git指令都没有输入时,所有的改变都存放于工作区 版本库-暂存区stage:当使用add指令后,工作区的修改就进入到暂存区了 版本库-分支:确定要生效的代码可以通过commit指令添加到各个指定的分支中,变更的代码就真正进入了代码库中,可以push到其他主机,或被pull或clone到其他主机了。 HEAD指针:指向了当前分支的最新一笔commit,HEAD^表示第二笔 commit:即是一个动作“提交”,也是一个名词“提交记录”
基础指令
git clone <git_repo_url> git pull [--set-upstream origin <branch_name>] 从远程仓库拉取分支,--set-upstream参数拉取指定的远程分支 git push 把代码推到远程仓库 git add <file_name或file_directory> 把代码添加到暂存区 git commit 把代码提交到代码库 git rebase 重整代码分支,合并两个分支时,用rebase而不是merge则可以减少一个commit记录,使git记录变得更清晰明确。也可以使用rebase合并、摘取、放弃某些commit。 git merge 合并分支时使用,会在git log中增加一个commit记录 git status 查看代码库的状态,多少文件被修改:多少在工作区、多少在暂存区 git log 查看commit记录 |
回退撤销
从工作区清空修改记录,回到上一笔add/commit之后干净的工作区:git checkout .或git checkout -- <file_name> 从暂存区回到工作区:git reset HEAD <file> 从暂存区直接舍弃,不回到工作区:git reset --hard HEAD <file>,hard参数就是控制修改是否保留到工作区的,默认是--soft就是把修改保留到工作区,不丢弃,--hard则会丢弃修改 回退分支:git log查看,找到目标分支,粘贴commit的hash号,git reset [commit_hash]。同上如果想把这个commit之后的修改保留到工作区,则不加参数,如果不想要了,则加--hard参数 删除中间的commit:用rebase,git log先找到要删的commit的上一个commit的hash,然后git rebase -i [上一个commit hash],然后pick要保留的,drop要放弃的 |
目前vmsone的分支策略
分支:正式环境master,预发环境dev,其他人各自一个分支,或每个功能一个具体的feature分支。 合并: - 先都从dev pull代码,然后在各自的本地checkout -b出新的分支,如git checkout -b feature1. - 然后在feature1上开发,开发结束后,git add . ,?git commit -s 添加签名编辑memo, - 之后切回dev分支,git pull --rebase 拉取最新的dev代码, - 再切回feature1分支,git rebase dev 合并dev最新的代码到feature1分支,然后push, - push成功后在coding上提MergeRequest请求合并到dev,触发代码评审,评审通过后合并到dev。master分支通过bamboo正式环境发布的流水线自动合并dev的代码
更新密码
git config –global credential.helper osxkeychain 之后push 然后就会让重新输入用户名和密码
rebase
git rebase -i [不进行处理的,要保留的最后一个commit的hash] |
然后进入vim的编辑页面,列举了之后的所有commit
pick commit_hash1 commit_comment1 pick commit_hash2 commit_comment2 |
如果要删掉其中的部分commit,则直接把pick换成drop
pick commit_hash1 commit_comment1 drop commit_hash2 commit_comment2 |
如果要合并其中的一些commit,则保留一个pick,把其他pick换成squash
pick commit_hash1 commit_comment1 squash commit_hash2 commit_comment2 squash commit_hash3 commit_comment3 |
放弃本次rebase
出现冲突,冲突地方被标注在文件中了 1. 解决冲突 2. rebase ontinue:
git add . git rebase -- continue |
git log
查看本周我的提交git log --pretty=format:"%h - %an, %ar : %s" --author='jiawanhua' --since="2020-11-23"
呈现形式
参数 | 含义 |
---|
-p /--patch | 按补丁格式显示每个提交引入的差异。 | --stat | 显示每次提交的文件修改统计信息。 | --shortstat | 只显示 –stat 中最后的行数修改添加移除统计。 | --name-only | 仅在提交信息后显示已修改的文件清单。 | --name-status | 显示新增、修改、删除的文件清单。 | --abbrev-commit | 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。 | --relative-date | 使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。 | --graph | 在日志旁以 ASCII 图形显示分支与合并历史。 | --pretty | 使用其他格式显示历史提交信息。可用的选项包括?oneline 、short 、full 、fuller ?和?format (用来定义自己的格式)。 | --oneline | --pretty=oneline --abbrev-commit ?合用的简写。 |
--pretty=format 指定了log以单行的形式展示,每行中按照format的格式来展示
选项 | 说明 |
---|
选项 | 说明 |
---|
%H | 提交的完整哈希值 | %h | 提交的简写哈希值 | %T | 树的完整哈希值 | %t | 树的简写哈希值 | %P | 父提交的完整哈希值 | %p | 父提交的简写哈希值 | %an | 作者名字 | %ae | 作者的电子邮件地址 | %ad | 作者修订日期(可以用 –date=选项 来定制格式) | %ar | 作者修订日期,按多久以前的方式显示 | %cn | 提交者的名字 | %ce | 提交者的电子邮件地址 | %cd | 提交日期 | %cr | 提交日期(距今多长时间) | %s | 提交说明 |
筛选条件
选项 | 说明 |
---|
-<n> | 仅显示最近的 n 条提交。 | --since ,?--after | 仅显示指定时间之后的提交。 | --until ,?--before | 仅显示指定时间之前的提交。 | --author | 仅显示作者匹配指定字符串的提交。 | --committer | 仅显示提交者匹配指定字符串的提交。 | --grep | 仅显示提交说明中包含指定字符串的提交。 | -S | 仅显示添加或删除内容匹配指定字符串的提交。 |
|