本篇主要汇总工作中常用的一些git指令和面试问题,持续更新
- 初始化仓库
git init
- 克隆一个项目代码
git clone [url]
- 新建一个分支,并切换到该分支
git checkout -b [branch]
处理bug时可以先创建一个分支,然后add - commit - merge,最后删除该分支
- 查看当前分支
git branch
git branch命令会列出所有分支,当前分支前面会标一个*
号
master
system_test
* yunfei
- 查看修改的文件
git status
- 添加当前目录的所有文件到暂存区
git add .
- 提交暂存区到仓库区
git commit -m [message]
- 推送前获取远程仓库更新,并与本地分支合并
git pull [remote] [branch]
- 推送本地指定分支到远程仓库
git push origin dbase_bugfix 就可以了
# 推送分支并创建track
git push --set-upstream origin dbase_bugfix
- 删除本地分支
git branch -d [branch-name]
# 强制删除
git branch -D dev
先切换到别的分支才能删除
- 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
- 将文件存至暂存区
# 保存到缓存区
git stash save '本次暂存的标识名字'
# 查看暂存区列表
git stash list
# 查看最近暂存区保存的内容
git stash show
git stash show stash@{index}
# 删除暂存区指定记录
git stash drop stash@{index}
# 清空缓存区
git stash clear
- 从草稿箱还原文件
# 恢复最近暂存的内容
git stash pop
# 恢复指定草稿(pop会删除暂存区内容)
git stash pop stash@{index}
git stash apply stash@{0}
- 查看分支差异
# --stat参数不显示具体差异代码
git diff master yunfei [--stat]
- 删除不存在的远程跟踪分支并更新
git fetch -p
- 合并代码
git merge [branch]
# 取消合并
git merge --abort
# 显示分支合并图
git log --graph
# 查看最近3次的提交和涉及的文件
git log -3 --stat
# 查看某次commit hashID的提交详情
git show hashID
- 拆分A分支数据到B分支
git checkout A
git log (获取A分支提交的commitID)
git checkout B
git cherry-pick commitID
git cherry-pick commit1..commit100 (可进行连续拆分)
- 修改默认配置
# 设置大小写敏感
git config core.ignorecase false
# 设置默认用户名
git config --global user.name "YOUR NAME"
# 设置默认邮箱
git config --global user.email "YOUR EMAIL ADDRESS"
全局配置保存在:$Home/.gitconfig
本地仓库配置保存在:.git/config
- 追溯指定文件的提交历史
git blame composer.json
- 撤销提交(--hard为强制提交,可以不加)
git reset --hard HEAD
# 后退一步
git reset --hard HEAD^
# 后退N步
git reset --hard HEAD~2
# 撤销指定记录提交
git log
git reset --hard commit_id (哈希索引值)
# 撤销指定文件提交
git reset HEAD README.MD (指定文件名)
git reflog (查看非明细)
git reset HEAD@{1} (注意数字1是需要撤销到的版本)
英文状态下按q退出git log
- 忽略提交文件
根目录创建一个名为 .gitignore 的文件,并提交到git
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的TODO文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
- 忽略指定文件(丢弃工作区的修改)
git checkout -- application/api/controller/v1/stock/Tools.php
用于版本库里的版本替换工作区的版本,无论工作区是修改还是删除
- 删除文件
git rm README.MD
git commit -m "remove README.MD"
- 常见问题
atal: It seems that there is already a rebase-apply directory, and
I wonder if you are in the middle of another rebase. If that is the
case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please
rm -fr ".git/rebase-apply"
and run me again. I am stopping in case you still have something
valuable there.
解决:
git status
git rebase --abort
网友评论