记录Git常用功能
基本命令
$ git init 将目录变成Git可管理的仓库
$ git add <filename> 把文件添加到索引库
$ git add -u 添加修改的文件到索引库
$ git commit -m "***" 提交所有更改,附加本次提交的说明
$ git status 查看当前仓库有哪些改动
$ git diff <filename> 查看文件的改动
$ git log 查看提交记录,--pretty=oneline 参数表示只看版本号和提交说明
$ git reset --hard HEAD^ 回退到上一个版本,HEAD^ 表示上一个版本,HEAD~100 表示上100个版本
$ git reset --hard commitid 根据版本号回退
$ git reflog 查看历史命令
$ git checkout -- <filename> 撤销修改回到最近一次 git commit 或 git add 时的状态
$ git rm <filename> 删除文件
名词概念
工作区:Git仓库的文件目录
版本库:工作区中隐藏的文件目录 .git ,其中 index 是暂存区,还有Git为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD
git add 实际上就是把文件修改添加到暂存区;
git commit 实际上就是把暂存区的所有内容提交到当前分支
它们的关系如下图:

分支管理
$ git checkout -b <branch> 创建并切换到分支,-b 表示创建并切换
$ git branch 查看当前分支
$ git checkout <branch> 切换到某个分支
$ git merge <branch> 合并分支到 master 分支上
$ git branch -d <branch> 删除分支,-D 强行删除
$ git log --graph 查看分支合并图,当分支有冲突时会无法合并分支
$ git stash 保存分支当前状态
$ git stash pop 恢复保存的状态并删除stash内容
$ git stash list 查看stash内容
远程仓库
$ git clone [-b <remote-branch>] <address> <dict> 克隆远程库(的某一个分支)到本地目录
$ git remote -v 查看远程仓库信息,远程仓库默认的名称是 origin
将本地仓库推送至远程仓库
$ git remote add origin <address> 关联远程库
$ git push origin <local-branch>:<remote-brance> 提交本地某个分支至远程库的一个分支上,如果冒号前为空的话,就会删除分号后面的远程仓库的分支!(相当于push了空内容到远程分支上)
$git remote remove origin 取消远程仓库关联
从远程仓库拉取更新
$ git fetch origin master:temp 将远程仓库master分支下载到本地temp分支
$ git diff temp 比较本地仓库与temp分支的区别
$ git merge temp 如果没有问题就合并两个分支
$ git branch -d temp 删除temp分支
子模块
$ git submodule add <addr> <path> 向工程中添加地址为<addr>的模块到<path>文件夹中
$ git submodule update --init --recursive 在工程中递归初始化子模块
$ git rm --cached [path] 根据路径删除子模块。(后续需要在 .gitmodules 和 .git/config 文件中删除相关配置,并且需要删除子模块文件夹)
回滚
$ git log 查看提交历史,找到要回滚版本的commit id
$ git reset --soft ${commit-id}: 回滚某个版本,--soft表示保留修改记录,--hard表示不保留修改记录
$ git stash 暂存修改
$ git push -f 强制覆盖
cherry-pick
$ git checkout <dev> 切换到开发分支
$ git cherry-pick <commit-id> 选择特性分支某个需要合并的commit到开发分支上
$ git cherry-pick <start-commit-id>..<end-commit-id> 选择多个commit,左开右闭区间
$ git cherry-pick <start-commit-id>^..<end-commit-id> 选择多个commit,闭区间
$ git push 推送