git命令科普

216 阅读5分钟

前言

大部分公司都在使用git作为项目代码的管理工具,本篇文章主要讲常用的git命令

基础

  • 生成id_rsaid_rsa_pub
  • id_rsa_pub添加到github或者gitlab的sshkey目录里
ssh-keygen -t rsa -C "your_email@example.com"

查询本地git配置

git config --global --list

修改全局git用户的邮箱和名字

git config --global user.name "xxx"
git config --global user.email "xxx@xx.com"

将本地项目初始为git仓库

git init

从远程仓库克隆代码到本地,默认master分支

git clone https://gitlab.com/path [项目名]		可自定义项目名

查看当前工作区的文件状态

git status
git status -s 		精简输出的文字格式,只显示文件名

添加忽略文件.gitignore

# 忽略所有以~结尾的文件
*~
# 忽略所有的 .js 文件
*.js
# 但跟踪所有的 lib.js,即便你在前面忽略了 .js 文件
!lib.js
# 只忽略当前目录下的 json 文件,而不忽略 src/.json
/.json
# 忽略任何目录下名为 dist 的文件夹
dist/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

移除index暂存区的修改记录

git rm -r --cached			可以使.gitignore立即生效,但是不建议

将工作区内容添加到index暂存区

git add home.vue					单个文件
git add src/						指定目录
git add src/*.vue					同类型文件
git add src/ static/ config/		多个目录
git add *							所有状态变更的文件

提交内容到本地仓库的当前分支

git commit -m 'xxx'		
git commit -am 'xxx'				合并addcommit操作

从远程指定分支拉取代码到本地工作区,fetch是只拉取不修改本地内容,pull是拉取并合并本地内容,如果远程代码与本地代码有合并冲突,git pull将失败

git fetch origin master
git pull origin master

将代码推送到远程指定分支

git push origin master

当然每次这么输入有点麻烦,可以这样设置
git push --set-upstream origin <branch>
可以简写为
git push -u origin <branch>
下次直接
git push
git push -f 						强制提交

分支 git branch

查看分支

git branch							查看本地分支
git branch -r						查看远程分支
git branch -a						查看所有分支
git branch -v						查看每一个分支的最后一次提交
git branch --merged					哪些分支已经合并到当前分支
git branch --no-merged				哪些分支未合并到当前分支

创建分支

git branch <new branch>				创建分支
git checkout <new branch>			将新分支的代码放在工作区
合并操作
git checkout -b <new branch>		创建分支并切到新分支上

合并分支

git merge <branch>	将branch合并到当前分支,前提是branch是clean的(没有未提交)
git rebase <branch>	将当前分支(相对于同一个祖先提交)的修改拷贝一份,然后快进到<branch>的后面 

将指定文件从其他分支检出到当前工作区(当前文件会被覆盖掉)

git checkout <branch> <file>		将branch的指定文件检出到当前分支的工作区

删除指定本地分支

git branch -d <branch>				如果有未合并内容,会删除失败,
git branch -D <branch>				可以使用-D强制删除

标签 git tag

查看标签

git tag								查看所有tag
git tag -l "v1*"					查看v1版本开头的tag
git show v1.0.0						查看指定的标签

创建轻量标签

git tag v1.0.0

创建附注标签 包含打标签者的名字、电子邮件地址、日期时间

git tag -a v1.0.0 -m "version 1.0.0"	

后期打标签

git log --pretty==oneline						查看提交记录
git tag -a v2.0 -m 'verison 2.0' <commit id>	给指定的提交补上标签

远程 git remote

查看远程信息

git remote show origin

删除指定远程分支

git push origin -d <branch>

贮藏 git stash

把还没提交的文件贮藏起来,然后可以切换到别的分支工作,

git stash				贮藏当前分支上的未提交的文件
git stash list				查看贮藏堆栈
git stash apply				应用最近的贮藏
git stash apply [stash@{2}]		应用指定的贮藏
git stash drop [stash@{2}]		移除堆栈指定的贮藏
更方便的用法
git stash pop				应用后就移除
git stash clear				清空贮藏堆栈

记录 git log/git reflog

查看当前分支提交记录

git log
git log --pretty==oneline		单行显示

显示整个本地仓储的commit, 包括所有branch的commit, 甚至包括已经撤销的commit,

git reflog						只要HEAD发生了变化, 就会在reflog里面看得到

比较 git diff

git diff -- /src			对比工作区(未 git add)和暂存区(git add 之后)

git diff --cached -- /src	对比暂存区(git add 之后)和版本库(git commit 之后)

git diff HEAD -- /src		对比工作区(未 git add)和版本库(git commit 之后)

撤回操作

在任何一个阶段,你都有可能想要撤消某些操作

重新提交,覆盖上次的提交,不会生成多余的commit记录

git commit -m '趁经理没发现,重新提交' --amend 

回滚到指定commit的时候并覆盖当前工作区内容,!!指定commit之后的提交将丢弃!!,git log查不到原先commit之后的内容

git reset --hard <commit id>		

回滚一个指定版本,进入reverting状态,重新提交,在git log中都是有记录的

git revert -n <commit id>
git add
git commit

撤销暂存区的修改(将HEAD指向上一次的commit)

git reset HEAD <file>

放弃工作区的文件修改(相当于回到上一次commit之后的文件状态)

git checkout -- <file>

官网

git-scm.com/