Git 基础命令介绍

2019/03/15 Git Git, 版本控制

常用命令

类型 功能 命令
基础 查看状态 git status
基础 查看分支 git branch -[v/vv]
基础 创建分支 git branch banchname
基础 切换分支 git checkout branchname
基础 添加文件/更改到暂存区 git add filename
基础 添加所有文件/更改到暂存区 git add .
基础 提交修改 git commit -m ‘msg’
基础 修改上次 commit git commit –amend
基础 查看配置信息 git config –list
缓存 暂存当前修改 git stash
缓存 读取上次暂存 git pop
比较 比较工作区和暂存区 git diff
比较 比较暂存区和版本库 git diff –cached
比较 比较工作区和版本库 git diff HEAD
修改 从暂存区移除文件 git reset HEAD filename
修改 撤销已修改的文件 git checkout – filename
修改 移除并删除文件 git rm [-f] filename
修改 移除但不删除 git rm –cached filename
修改 修改名称 git mv filename-old filename-new
日志 查看提交日志 git log
日志 定制日志格式 git log –pretty=format:”%h - %an, %ar : %s”
分支 新建分支并切换到该分支 git checkout -b banchname
分支 删除分支 git branch -d/-D banchname
分支 当前分支上合并 brnachname git merge banchname
分支 取出特性分支在 master 上重演 git rebase [主分支] [特性分支]
分支 从远程拉取最新代码 git pull origin [远程分支]
分支 推送本地分支到远程 git push origin localbranch:remotebranch
分支 删除指定的远程分支 git push origin :remotebranch
分支 强制 push git push origin +master:master
仓库 查看远程仓库 git remote [-v]
仓库 添加远程仓库 git remote add [shortname] [url]
仓库 从远程仓库抓取数据 git fetch [-p] [remotename]
仓库 移除本地远程仓库 git remote rm remotename
标签 列出所有标签 git tag
标签 推送 tags 到远程仓库 git push –tags
标签 打标签 git tag -a v1.0 -m ‘msg’

Q&A

2019-03-18 Updated

rebase 的用法

git checkout mywork-branch
git rebase master # 将 mywork-branch 分支的提交做成 patch 更新到 master

global setup 全局设置

git config --global user.name "yanyan"
git config --global user.email "yanyan@lianjia.com"

clone 克隆已有的仓库

git clone git@git.lianjia.com:strategy/strategy-image-process.git
cd strategy-image-process
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

已有文件创建仓库

cd existing_folder
git init
git remote add origin git@git.lianjia.com:strategy/strategy-image-process.git
git add .
git commit
git push -u origin master

统计代码

CMD 下直接执行可能失败,可以在右键,Git Bash here 里执行。

提交数统计

git log --oneline | wc -l

更详细可参考:Git代码行统计命令集

统计代码提交量

git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }'

仓库提交都排名前 5

如果看全部,去掉 head 管道即可。

git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5

基于某次 commit 创建分支

git checkout -b branchname 5234ab

表示以 commit hash 为 5234ab 的代码为基础创建分支。

恢复单个文件到指定版本

git reset 5234ab wiki.md

恢复 wiki.md 文件到 commit hash 为 5234ab 时的状态。

查看指定 commit 的修改内容

git show <commit-hash-id>

显示指定文件每一行明细

git blame <filename>

查看指定文件的修改历史

git log -p <filename>

查看最近两次的修改内容

git log -p -2

stash 的使用

查看 stash 列表:

git stash list

查看某一次 stash 的改动文件列表(不传参数默认显示最近一次):

git stash show stash@{0}

不过 git 的分支功能非常强大,其实建议这类操作都可以通过分支来解决。

gitk 中文乱码

在~/.gitconfig中添加如下内容

[core]
   quotepath = false
[gui]
   encoding = utf-8
[i18n]
   commitencoding = utf-8
[svn]
   pathnameencoding = utf-8

更详细可参考 git 乱码解决方案汇总

记住 http(s) 的用户名密码

在有些情况下无法使用 git 协议,比如公司的 git 服务器设置了 IP 白名单,只能在公司内网使用 ssh,那么在外面就只能使用 http(s) 上传下载源码了,但每次都手动输入用户名/密码特别惨,于是乎就记住吧。

设置记住密码(默认 15 分钟):

git config --global credential.helper cache

自定义记住的时间(如下面是一小时):

git config credential.helper 'cache --timeout=3600'

长期存储密码:

git config --global credential.helper store

Search

    个人微信 加好友请备注来源

    严小言要努力

    Table of Contents