Git 常用指令 | 系统开发
本文最后更新于:2023年8月31日
[TOC]
开发过程中常用的 Git 指令总结。
全局设置用户名和邮箱
git config --global user.name "your_name"
git config --global user.email "your_email@email.com"
协作开发
# 拉取远程分支代码
git clone -b https://github.com/xxx/yyy.git
# 创建自己的本地开发分支
git checkout -b dev_branch
# 提交代码
git add .
git commit -m "完成开发"
# 合并分支最新代码
# 方法 1
git pull origin dev_branch # 相当于 fetch + merge
# 方法 2
git pull --rebase origin dev_branch # 相当于 fetch + rebase
# 解决冲突
# merge 引起的,处理完冲突后
git add .
git commit -m "合并分支"
# rebase 引起的,处理完冲突后
git add .
git rebase --continue
# 推送到远程仓库
git push origin dev_branch
撤销修改
- 恢复删除但是未 add 到缓存区的文件
git reset HEAD filename
git checkout filename
本地修改尚未 add 到缓存区
git checkout -- filename # 单个文件/文件夹 git checkout . # 所有文件/文件夹
本地修改已经 add 到缓存区
git reset HEAD filename # 单个文件/文件夹 git reset HEAD . # 所有文件/文件夹
本地新增尚未 add 到缓存区
rm filename# 单个文件 rm -r dir # 单个文件夹 git clean -xdf # 所有文件/文件夹
本地新增已经 add 到缓存区
git rm --cached filename/dir # 单个文件
修改最后一次 commit
git commit -m "xxxxx" --amend
回到某个 commit,保留未 add、commit 的内容,并将已经 commit 的内容变为已 add 未 commit 的状态
git reset --soft xxxxx
回到某个 commit,保留未 add、commit 的内容,并将已经 add、commit 的内容变为未 add 的状态
git reset (--mixed) xxxxx
回到回到某个 commit,放弃所有修改
git reset --hard xxxxx
- 撤销 pull
git reflog # 查看变更历史记录
git reset --hard xxx
恢复被删的文件
git reset HEAD ${deleted_file_or_folder}
git checkout ${deleted_file_or_folder}
子模块
创建
如果想要将一个已存在的仓库添加为当前仓库的子模块,可以通过下面的命令来添加新的子模块。
git submodule add https://github.com/xxx.git path/to/dir
注意:
- 路径不能以 / 结尾(会造成修改不生效)
- 不能是现有工程已有的目录
使用
方法一:
git clone --recursive https://github.com/xxx.git
方法二:
git clone --recursive https://github.com/xxx.git git submodule init git submodule update
修改
- 更新 .gitmodules 中对应 submodule 的条目 URL
git submodule sync
更新
- 进入到字模块目录
git pull
- 在项目根目录
git push
删除
git submodule deinit ${module_name}
git rm --cached ${module_name}
rm -rf ${module_name}
重命名
删除后重新添加
仓库/分支管理
取消关联远程仓库
git remote remove origin
关联远程仓库
git remote add origin https://github.com/xxx/yyy.git
关联本地分支与远程分支
git push origin local_branch:remote_branch # local_branch 必须为你本地存在的分支,remote_branch 为远程分支,如果 remote_branch 不存在则会自动创建,local_branch 留空的话则是删除远程 remote_branch 分支
合并远程分支,以远程/本地为准
git fetch git merge origin/target_branch --strategy-option theirs # 以远程为准 git merge origin/target_branch --strategy-option ours # 以本地为准
重命名分支
git branch -m old_name new_name # 本地分支重命名 git push origin :branch_to_be_deleted # 删除远程分支 git push origin 本地分支名:远程分支名
查看分支关系图
git log --graph --decorate --oneline --simplify-by-decoration --all # --decorate 标记会让 git log 显示每个 commit 的引用(如分支、tag 等) # --oneline 一行显示 # --simplify-by-decoration 只显示被 branch 或 tag 引用的 commit # --all 表示显示所有的 branch,这里也可以选择,比如我指向显示分支 ABC 的关系,则将 --all 替换为 branchA branchB branchC
标签管理
添加标签
git tag tag_name
推送标签
git push origin tag_name # 单个标签 git push --tags # 所有标签
删除标签
git tag -d tag_name # 本地标签 git push --delete origin tag_name # 远程标签 git push origin :refs/tags/tag_name # 远程标签
大文件
yum install git-lfs # 安装
git lfs install # 初始化
git lfs track xxx # 跟踪特定文件,提交代码需要将 .gitattributes 文件提交至仓库,它保存了文件的追踪记录
git add .
git lfs ls-files # 获取 git lfs 管理的所有文件列表
git commit -m "xxx"
git push
合并提交记录
git rebase -i HEAD~n
n 是包括最新提交在内的需要合并的记录的条数,此时会自动打开一个文本文件,注意这个文本文件中从上到下显示的提交顺序是从旧到新。从第二行开始将记录前面的 pick 改成 squash,然后保存退出。如果合并成功会打开另外一个文件文件,在这里输入这次合并时的提交记录信息。
如果需要合并远端仓库的提交记录,则在 push 的时候需要加上 -f 选项。
强制更新为远端代码
git fetch --all
git reset --hard origin/${target_branch}
允许合并无关的历史
git pull origin master --allow-unrelated-histories
拉取单独某个分支
git clone -b ${branch} --single-branch ${repo}
仓库瘦身
导出 stash 内容
git stash show "stash@{0}" -p > stash_0.patch
参考
评论系统采用 utterances ,加载有延迟,请稍等片刻。