首先通过下图对git的工作机制有一个整体的认知。
Workspace<==========>工作区 Index/stage<========>暂存区
Repository<==========>本地仓库 Remote<===========>远程仓库
下面将本人在目前项目管理中常用的git指令列举出来,后期遇到新的常用指令,后续再增加。
一、新建代码库
$ git init# 在当前目录新建一个Git代码库
$ git init project-name # 新建目录并将其初始化为Git代码库
$ git clone url# 下载一个项目和它的整个代码历史
二、配置
$ git config --list# 显示当前的Git配置
$ git config -e --global# 编辑Git配置文件
# 设置提交代码时的用户信息
$ git config --global user.name "name"
$ git config --global user.email "email address"
$ git help command # 显示command的help
三、增加/删除文件
$ git add file1 file2 ...# 增加指定文件至暂存区
$ git add dir # 增加指定目录至暂存区,包括子目录
$ git rm file1 file2 ...# 删除工作区文件,并将其从git仓库移除
$ git rm --cached file1...# 删除缓存区文件,但工作区的文件会保留
$ git mv file1 file2 # 将工作区和缓存区的file1重命名为file2
$ git add --all file1 # 在工作区删除了file1,执行该命令能将其在缓存区也删除
注意: git add 对于版本不同,会有区别:
Git version 1.x:
Git version 2.x:
四、代码提交
$ git commit -s -m “...” # -m表示提交的描述信息 -s显示signed-off-by
$ git commit --amend #不会产生新的commitID,改写上次提交的commit信息
五、撤销
$ git checkout file # 将暂存区的file恢复到本地工作区
$ git checkout commit file # 恢复某个commit的指定文件到暂存区和工作区
$ git checkout . # 恢复暂存区的所有文件至工作区
$ git reset file # 将暂存区的指定文件恢复至上次commit版本,但不改变工作区文件
$ git reset commit# 重置当前分支的HEAD为指定的commit,同时重置暂存区,工作区保持不变
$ git reset --hard commit# 重置当前分支的HEAD为指定的commit,同时重置暂存区和工作区
$ git reset --keep commit# 重置当前分支的HEAD为指定的commit,但暂存区和工作区保持不变
注意:执行git reset --hard xxxxx后,本地文件也会被覆盖,若之前有通过git add追踪过这些文件,只是没有commit,可以通过git fsck --lost-found指令找回本地文件,本地文件在.git/lost-found/other文件夹下。通过该指令可以恢复任何git add过的文件,通过find .git/objects/ -type f | xargs ls -lt | sedmq 命令,可以找到最近add到本地仓库的m个文件。
六、分支管理
$ git branch # 列出所有本地分支
$ git branch -r# 列出所有远程分支
$ git branch -a# 列出所有本地分支和远程分支
$ git branch branchname # 新建一个分支,并停留在当前分支
$ git branch -b branchname# 新建一个分支,并切换到该分支
$ git checkout branchname# 切换到指定分支,并更新工作区
$ git branch checkout - # 切换到上一个分支
$ git merge branchname # 合并指定分支到当前分支
$ git cherry-pick commit # 选择一个commit,合并到当前分支
$ git branch -d branchname # 删除分支
$ git push origin --delete branchname# 删除远程分支
$ git branch -dr remote/branchname # 删除远程分支
七、信息查看
$ git status# 显示变更的文件
$ git log# 显示当前分支的版本历史
$ git log --stat# 显示commit历史及每次commit发生变更的文件
$ git log -S keyword# 根据关键词搜索提交历史
$ git log -p file# 显示指定文件相关的每一次diff
$ git log -5 --pretty --oneline# 显示过去5次提交
$ git shortlog -sn# 按提交次数排序显示所有提交过的用户
$ git log --follow file# 显示指定文件的版本历史,包括文件改名
$ git whatchanged file# 显示指定文件的版本历史,包括文件改名
$ git blame file# 显示指定文件是什么时候什么人修改过的
$ git diff# 显示工作区和暂存区的差异
$ git diff --cached file# 显示暂存区和上一个commit之间的差异
$ git diff HEAD # 显示工作区与当前commit之间的差异
$ git diff commit1 commit2# 显示两次提交之间的差异(可将差异重定向到文件中如 > file.diff)
$ git diff --shortstat “@{0 day ago}”# 显示今天写了多少行代码
$ git show commit# 显示某次提交的元数据和内容变化
$ git show commit:file# 显示某次提交时,某个文件的内容
$ git reflog# 显示当前分支的最近几次提交
八、远程同步
$ git fetch remote # 下载远程仓库的所有变动
$ git remote -v # 显示所有远程仓库
$ git remote show remote # 显示某个远程仓库信息
$ git remote add remotename #增加一个新的远程仓库并命名
$ git pull remote branch #取回远程仓库的变化,并与本地合并
$ git push remote branch #上传本地指定分支到远程仓库
$ git push remote --all #推送所有分支到远程仓库