前言
本文章描述Git常用命令的使用。
常用命令
配置git环境
git config
git config --global user.name
配置用户名
git config --global user.name "xxx"
xxx是用户名,例如"Ming Li"
git config --global user.email
配置邮箱
git config --global user.email "xxx@xxx.com"
xxx@xxx.com是邮箱。
git config --global core.editor
配置编辑器
git config --global core.editor vi
配置git默认编辑使用vi
配置vi行长度提示
vi ~/.vimrc
set colorcolumn=72
72是提示行字符数,可按实际需求更改。
如下图,vi打开文件编辑时,会有提示。
git config --global http.proxy
配置http代理
git config --global http.proxy 'http://xxx.com:8080'
git config --global http.sslverify
配置http ssl校验开关
git config --global http.sslverify false
git config --global --unset http.proxy
取消http代理配置
git config --global https.proxy
配置https代理
git config --global https.proxy 'https://xxx.com:8080'
git config --global https.sslverify
配置https ssl校验开关
git config --global https.sslverify false
git config --global --unset https.proxy
取消https代理配置
建立代码仓
git init
初始化当前目录为代码仓,初始化后会将当前仓库设置为master。
# 创建目录
mkdir test
# 进入目录
cd test
# 初始化仓库
git init
git clone
将远程仓库关联到本地,例如
git clone https://github.com/openbmc/openbmc.git
git fetch
拉取远程所有分支,该操作并不会合并。
可以拉去某一分支
git fetch xxx
也可以去拉某一分支的commit-id,方便cherry-pick
git fetch branch-name commit-id
git pull
下载更新更改,并直接合并HEAD。
git rebase
git rebase xxx
将当前的HEAD重新设置。
git rebase --abort
中止基准
git rebase --continue
解决冲突后继续进行基准
git rebase -i HEAD~n
修改前n次的提交信息。
修改之后结合git commit --amend和git rebase --continue使用。
代码分支
git branch
git branch
查看本地代码分支
git branch -a
查看本地和远程所有分支
git branch fix-xxx-issue
创建分支,但不会切到新建分支
git branch -m fix-xxx-issue fix-zzz-issue
修改分支名称
git branch -D fix-xxx-issue
删除分支
git checkout
git checkout fix-xxx-issue
切换分支
git checkout -b fix-yyy-issue
创建分支,并切换到该分支
git checkout -b fix-yyy-issue origin/fix-yyy-issue
同步远程分支,并创建切换到该分支
git remote
有时候远程分支已删除,但git branch -a查看删除分支本地还存在。
git remote show origin
查看远程仓库信息
git remote prune origin
刷新本地分支仓库
git remote -v
查看远程仓库地址
查看代码
git log
git log
查看代码合入记录
git log --oneline
单行显示合入记录
自定义git log
将~/./gitconfig文件配置alias可以自定义简化git log命令
[alias]
log1=log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) %G? - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)'
git log1
git show
查看某一合入具体修改信息
git grep
根据合入关键词搜索相关代码。
修改代码
git status
查看当前目录代码状态
修改前:
修改后:
git add
将修改的代码或新增的文件添加到缓存区。
git diff
查看代码修改详情。
git diff
添加缓存前:
git diff
可以保存diff文件
git diff > xxx.diff
git diff --cached
添加缓存后:
git diff --cached
git reflog
该命令用于恢复误删除的commit或者分支。
查看操作记录命令:
git reflog show
获取到hash id之后,可以使用git reset 命令恢复
git reset --hard id
如果此时还需要某个commit,可以再结合git cherry-pick命令
git cherry-pick commit-id
git am
该命令可以将patch文件打到当前代码中,commit到当前分支,并且保留补丁文件中的作者和提交信息。
支持diff、patch格式文件。
git am --rej xxx.patch
git apply
该命令可以将patch文件打到当前代码中,但不会commit。
支持diff、patch格式文件。
git apply --rej xxx.diff
git rm
移除文件
rm
添加缓存前,直接rm命令删除即可,无需使用git命令。
rm test.txt
git rm
添加缓存后
git rm --cached
该命令只是将文件从缓存中移除,文件实际上未被删除。
git rm -f
该命令是将文件从缓存中移除,并将文件彻底删除。
git stash
在你当前工作区修改了文件或者其它功能时,你想要切换或者创建到其它分区是不可能的。
git stash
保存当前工作状态。
git stash list
查看当前存储了多少工作状态。
git stash pop
切换回刚刚的分支,然后在刚刚的分支中将状态恢复。
git stash show
查看栈中最新保存的stash和当前目录的差异。
提交代码
git commit
提交代码,一般提交都需要描述提交信息,比如,实现什么功能,解决什么bug。
git commit -s
git commit -m
git commit -m "fix xxx issue."
git commit --amend
仅修改描述信息。
git merge
切换至master后,将fix-yyy-issue修改合并到master分支。
git merge fix-yyy-issue
git format-patch -n
根据最近n条commit生成patch。
git push
将本地分支提交到远程仓库
git push --set-upstream origin fix-xxx-issue
远程仓库该分支不存在:
git push --set-upstream origin fix-xxx-issue
git push origin fix-xxx-issue --force
远程仓库该分支存在,需要更新:
git push origin fix-xxx-issue --force
git push origin --delete fix-xxx-issue
删除远程仓库该分支
git push origin --delete fix-xxx-issue
git cherry-pick
将某一分支的代码合并到本分支。
git archive
回退代码
git restore
git restore
若该修改还未添加缓存,则该命令是将修改回退。
git restore
git restore --staged
若该修改已添加缓存,则该命令是将修改从缓存中回退,实际文件代码并未回退。
git restore --staged
git reset
git reset
等价于
git reset –mixed
重置所有缓存区操作,缓存区的文件会变为未缓存状态,文件修改依然存在。
git reset --hard
将HEAD指针重置为上一次提交,并丢弃此后的所有更改。
git reset --hard HEAD
放弃工作目录中的所有本地更改。
git reset --hard HEAD~n
回退至前n个版本。
git reset --hard commit_id
回退至commit_id的版本。
git reset –soft
将HEAD指针重置为上一次提交,并保留未提交的本地更改,依旧存在缓存区中。
git revert
通过产生具有相反更改的新提交来实现代码回退。