Skip to content

hty0111/Git

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 

Repository files navigation

Git版本管理

廖雪峰 Git 教程 & Learn Git Branching

""" <ref>指的是所有可被git引用的位置,如HEAD/commit/branch/tag等 """

# 基本推送流程
git init                                                    # 初始化仓库
git add <file>                                              # 添加文件到暂存区
git add .                                                   # 提交所有新文件
git add -A                                                  # 提交所有变化
git add -u                                                  # 提交所有修改和删除的文件
git rm <file>                                               # 删除版本库的文件
git commit -m "<log>"                                       # 提交文件到版本库
git remote add origin [email protected]:hty0111/<repo>.git     # 远程库的名字为origin
git push -u/--set-upstream origin/[master] master           # 将本地的master分支推送远程库origin并关联
git push -f origin <local_branch>[:<origin_branch>]         # 强制推送本地src到远程dst

# 版本管理
git checkout HEAD~^2~2                                      # 将HEAD的位置从现在的HEAD上移一次+上移到第二个父节点+上移两次,checkout本质是移动HEAD指针
git reset --hard HEAD^                                      # 当前版本为HEAD,上上个版本为HEAD^^,上100个版本为HEAD~100
git reset --hard <version>                                  # 根据版本号回退
git reset HEAD <file>                                       # 丢弃暂存区的修改:把暂存区的版本会退到工作区
git revert <ref>                                            # 撤销某一次提交并更新(用于远程库)
git checkout -- [<file>]                                    # 让工作区(的文件)回到最近一次commit/add的状态
git update-ref -d HEAD                                      # 撤销第一次commit
git commit --amend -m "<commit>"                            # 修改当前提交的commit内容

# 分支管理
git branch                                                  # 查看分支
git branch <dev> [<ref>]                                    # (在指定的提交处)创建分支
git switch <dev> / git checkout <dev>                       # 切换分支
git switch -c <dev> / git checkout -b <dev>                 # 创建并切换分支
git branch -f <dev> <ref>                                   # 移动分支到指定位置
git branch -d <dev>                                         # 删除已合并分支
git branch -D <dev>                                         # 删除未合并分支
git merge <dev>                                             # 将指定分支复制到当前分支,会创建新的commit
git merge --no-ff -m "<log>" <dev>                          # 禁用fast forward则merge时会产生新的commit
git merge --no-ff --no-commit                               # 不生成提交,可以手动选择需要add的改动文件后再commit
git cherry-pick <ref>                                       # 复制一个特定的提交到当前分支
git rebase <dev1> [<dev2>]                                  # 把(dev2分支)当前分支往dev1分支上整理成一条直线
git rebase -i HEAD^                                         # 交互式整理历史,pick改成drop即删除提交,改成edit可以编辑commit信息。pick; drop; edit: git commit --amend -m <commit>; fixup
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch <file>'   # 删除某个文件并重新生成commit(用于大文件)

# 远程仓库
git remote -v                                               # 查看远程库信息
git remote rm origin                                        # 解除本地和远程的绑定关系
git clone <url> [repo]                                      # 克隆到本地
git checkout -b <branch> origin/<branch>                    # 创建远程分支到本地
git branch -vv                                              # 查看本地分支和远程库关联情况
git branch -u/--set-upstream-to <branch> origin/<branch>    # 建立本地分支和远程分支的链接,注意与 git push -u 分支顺序相反
git pull origin <origin_branch>[:<local_branch>] [--rebase] # 抓取远程分支与本地当前/指定分支合并 == fetch + merge/rebase
git fetch origin <origin_ref>:<local_branch>                # 抓取远程分支ref位置未被本地branch分支包含的记录(不合并),若origin_ref为空,视为在本地新建local_branch
git merge origin/master -s ours --allow_unrelated_histories # 抓取远程分支后与本地分支合并
git push origin <local_ref>:<origin_branch>                 # 上传所有ref位置未被远程仓库branch分支包含的提交记录,若local_ref为空,视为删除远程仓库的origin_branch

# 子模块
git submodule add <url>                                     # 添加子模块,更新.gitmodules
git submodule update --init --recursive                     # 拉取所有子模块的内容
git clone <url> --recurse-submodules                        # 递归拉取所有子项目 == git clone + git submodule update --init --recursive
git submodule deinit <submodule> [--force]                  # 删除子模块信息,更新.git/config
git rm <submodule>                                          # 删除子模块文件夹,更新.gitmodules

# 日志和记录
git reflog                                                  # 查看每一次命令:用于找寻版本号
git status                                                  # 查看状态:可以看到是否有未提交的文件
git diff <file>                                             # 查看文件的修改情况
git log --graph --oneline --all                             # 查看所有分支的提交日志

# 储藏区
git stash                                                   # 储藏当前工作现场
git stash list                                              # 查看储藏区
git stash apply                                             # 恢复储藏区
git stash drop                                              # 删除储藏区
git stash pop                                               # 恢复并删除储藏区
git stash apply stash@{0}                                   # 恢复到指定的储藏区

# 标签
git tag                                                     # 查看所有标签
git show <tag>                                              # 查看标签信息
git tag <tag> [<ref>]                                       # 对某次提交打标签,默认是HEAD指向的位置
git tag <tag> <ref>                                         # 对特定版本打标签
git push origin <tag>                                       # 推送某个标签
git push origin --tags                                      # 推送所有标签
git tag -d <tag>                                            # 删除本地标签
git push origin :refs/tags/<tagname>                        # 删除远程标签
git describe <ref>                                          # 查找离ref(HEAD/commit/tag)最近的tag

# gitignore
git add -f <file>                                           # 强行添加gitignore忽略的文件
git check-ignore -v <file>                                  # 查看被忽略原因
git rm -r --cached <file>                                   # 清除添加gitignore之前已经被git跟踪的文件
!.gitignore                                                 # 避免被忽略

# 配置文件 C:\Users\HTY\.gitconfig or /home/hty/.gitconfig
git config --global alias.<alias> <cmd>                     # 取别名
git config --global --unset alias.<alias>                   # 删除别名

git config --global user.email "[email protected]"
git config --global user.name "HTY"
git config --global color.ui true                           # 显示颜色
git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"
git config --global alias.lg "log --color --graph --pretty=format:'%C(auto)%h -%C(auto)%d %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git config --global alias.lga "log --color --graph --pretty=format:'%C(auto)%h -%C(auto)%d %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"

版本管理策略

master分支用来更新大版本,dev分支用于开发。

*   5c6d6f7 (tag: v1.2, origin/master, master) feat(shoot): add gun shift
|\
* \   75756af (tag: v1.1) feat(imu): add mahony
|\ \
| | | * 91ceea9 (HEAD -> dev, origin/dev) feat(minipc): revise minipc
| | | * 968a5f0 fix(minipc): fix minipc usart receive
| | | * ff359d5 refactor(can): revise can receive
| | | * 231b2d1 feat(mode): update mode task
| | |/
| | * 11926af feat(shoot): add gun shift
| |/
| * 0b00845 feat(imu): add mahony
| * f6afc90 feat(can): add can auto-retransmission; remove redundant timer
| * 46526d7 feat(motor): revise motor offset
|/
* 058ee4d chore: first commit

提交格式

<type>(<scope>): <subject>

1. feat:用于表示新增了一个功能或特性。
2. fix:用于表示修复了一个bug或问题。
3. docs:用于表示更新了文档或注释。
4. style:用于表示对代码风格进行了调整,如格式化代码、修改变量命名等。
5. refactor:用于表示对代码进行了重构,既不是新增功能也不是修复bug,而是对代码结构进行了调整。
6. test:用于表示添加或修改了测试代码。
7. chore:用于表示对构建过程或辅助工具的修改,如更新依赖库、配置文件等。

其他教程

merge策略

版本管理策略

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published