Git

Git使用记录

"git"

Posted by leiyiming on April 12, 2017

记录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 commitgit 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 推送