收藏!史上最干货的Git命令整理,一文胜千言

举报
_陈哈哈 发表于 2022/01/22 00:21:27 2022/01/22
【摘要】 Git目前已经成为国内主流互联网公司通用的代码管理工具;大小企业也已随着潮流纷纷从CVS, Subversion向Git过度。可以说,Git已经成为一名合格程序员的必备技能。 而对于我们来说,无论新手或老油条,都需要有一套Git命令字典,方便随时使用。本文基本上涵盖了常用到的所有Git命令,足矣让我们得心应手的在公司使用Git...

Git目前已经成为国内主流互联网公司通用的代码管理工具;大小企业也已随着潮流纷纷从CVS, Subversion向Git过度。可以说,Git已经成为一名合格程序员的必备技能。

而对于我们来说,无论新手或老油条,都需要有一套Git命令字典,方便随时使用。本文基本上涵盖了常用到的所有Git命令,足矣让我们得心应手的在公司使用Git管理代码。

祝各位在公司游刃有余,早日升职加薪。北漂不易,点赞支持一下博主。

另外如有问题请在评论区留言呦,我会及时纠正。

 

目录

 

Git简介

Git与SVN的区别

Git基本流程

Git文件状态

用户配置

单机使用简单流程

Git命令记录

1、新建本地仓库

2、Git配置信息

3、增加、删除文件

4、代码提交

5、操作分支(branch)

6、标签Tag

7、查看信息

8、远程同步

9、撤销操作

10、其他操作

11、.gitignore忽略配置(提交到git时,忽略部分文件)

12、Git常用命令速查表


 

Git简介

  1. Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  2. Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  3. Git与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
  4. Git属于分布式版本控制系统,每个人电脑上都有一个完整的版本库,称为本地仓库,在本地就可以进行版本控制。另外在其他服务器上还有一个版本库,称为中央仓库,中央仓库的作用是进行版本交换,每个开发人员要保持代码一致只需要和中央仓库进行交互就可以了。

 

Git与SVN的区别

  • Git不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
  • 如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应Git提供的一些概念和特征。

区别点:

  1. Git是分布式的,SVN不是:这是Git和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  2. Git把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
  3. Git分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
  4. Git没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
  5. Git的内容完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git基本流程

下图是Git基本操作的流程图,一般来说,日常使用只要记住下图7个命令就可以了。当然,不能靠这几个基础语法就以为熟练使用了Git哦,下面整理了详细的语法记录,结合实际情况,祝你快速掌握Git。

Git文件状态

  • untracked:未跟踪,表示文件不受git管理,一般新建的文件处于该状态   Untracked files
  • staged:已暂存,表示对以修改的文件做了标记,使之包含在下次要提交的文件列表中   Changes to be committed
  • committed:已提交,表示文件已经被提交到本地仓库
  • modified:已修改,表示文件内容已被修改,但是没有做标记    Changes not staged for commit

用户配置

如果Git没有获取到用户配置,则只能拉取代码,不能修改,想使用git,你要告诉git是谁在使用;

如下,配置用户名和邮箱  


  
  1. $ git config --global user.name "xxx"
  2. $ git config --global user.email "xxxx@qq.com"

查看当前用户名和邮箱


  
  1. $ git config --global user.name   # 获取当前登录的用户
  2. $ git config --global user.email  # 获取当前登录用户的邮箱

单机使用简单流程


单人使用时,只有master,推送项目到远程仓库基本流程就没必要这么麻烦,如下即可:

  1. 在git上创建远程远程仓库
  2. git clone [HTTP URL] # 克隆下来后是一个带有.git的文件夹,也就是本地仓库
  3. git add . # 添加该目录下所有文件到暂存区,也可以指定文件名称 
  4. git commit -m "第一次提交" # 添加文件到本地仓库并提交描述信息
  5. git push -u origin master # 把本地仓库的文件推送到远程仓库(-u 表示第一次推送master分支的所有内容,后面再推送就不需要-u了)

Git命令记录

1、新建本地仓库

命令 功能介绍
git init

在当前目录新建一个Git代码库;

该命令将在该项目目录下创建一个.git的子目录,包含该Git仓库中所有的必须文件。

git init [project-name] 新建一个目录,将其初始化为Git代码库
git clone [url] 下载一个项目和它的整个代码历史

 

2、Git配置信息

命令 功能介绍
git --version  查看git的版本信息

git config --list

git config -l

显示Git当前配置信息,点击“q”键退出查看
git config -e 编辑Git本地配置
git config -e --global

编辑Git全局配置

Git配置解析


  
  1. user.email=chenhh@xxx.com
  2. user.name=chenhh
  3. core.ignorecase=false # 不许忽略文件名大小写
  4. core.autocrlf=input # 换行模式为 input,即提交时转换为LF,检出时不转换
  5. core.filemode=false # 不检查文件权限
  6. core.safecrlf=true # 拒绝提交包含混合换行符的文件
  7. core.editor=vim
  8. core.repositoryformatversion=0 # Internal variable identifying the repository format and layout version
  9. core.bare=false # 默认不创建裸仓库
  10. core.logallrefupdates=true # log 所有 ref 的更新
  11. core.precomposeunicode=true # Mac专用选项,开启以便文件名兼容其他系统
  12. push.default=simple # 只推送本地当前分支,且与上游分支名字一致
  13. alias.lg=log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
  14. pull.rebase=true # 强制开启 rebase 模式
  15. credential.helper store # 记住密码

 

3、增加、删除文件

命令 功能介绍
git add . 添加当前目录的所有文件到暂存区
git add [file1][file2] ... 添加指定文件到暂存区
git add [dir] 添加指定目录到暂存区,包括子目录
git add -p 对于同一个文件的多处变化,可以实现分次提交
git rm [file1] [file2] ... 删除工作区文件,并且将这次删除放入暂存区
git rm --cached [file] 隐藏指定文件,使Git停止追踪,但该文件会保留在工作区
git mv [file-original] [file-renamed] 改名文件,并且将这个改名放入暂存区

 

4、代码提交

命令 功能介绍
git commit -m [message] 提交暂存区到仓库区,git commit -m "first commit"
git commit [file1] [file2] ... -m [message] 提交暂存区的指定文件到仓库区
git commit -a 提交工作区自上次commit之后的变化,直接到仓库区
git commit -v 提交时显示所有diff信息
git commit --amend -m [message]

使用一次新的commit,替代上一次提交;

如果代码没有任何新变化,则用来改写上一次commit的提交信息

git commit --amend [file1] [file2] ... 重做上一次commit,并包括指定文件的新变化

5、操作分支(branch)

命令 功能介绍
git branch 列出所有本地分支
git branch -r 列出所有远程分支
git branch -a 列出所有本地分支和远程分支
git branch [branch-name] 新建一个分支,但依然停留在当前分支
git checkout -b [branch] 新建一个分支,并切换到该分支
git branch [branch] [commit] 新建一个分支,指向指定commit
git branch --track [branch] [remote-branch] 新建一个分支,与指定的远程分支建立追踪关系
git checkout [branch-name] 切换到指定分支,并更新工作区
git checkout - 切换到上一个分支
git branch --set-upstream [branch] [remote-branch] 建立追踪关系,在现有分支与指定的远程分支之间
git merge [branch] 合并指定分支到当前分支;例:如果当前是master分支,需要合并dev分支:git merge dev
git cherry-pick [commit] 选择一个commit,合并进当前分支
git branch -m test dev 将test分支名字改为dev
git branch -d [branch-name] 删除名字为[branch-name]的分支;例如:git branch -D dev
git branch -D [branch-name] 强制删除名字为[branch-name]的分支;例如:git branch -D dev
git push origin --delete [remote-branchname] 删除远程分支

 

6、标签Tag

命令 功能介绍
git tag 列出所有tag
git tag [tag] 新建一个tag在 当前 commit
git tag [tag] [commit] 新建一个tag在 指定 commit
git tag -d [tag] 删除本地tag
git push origin :refs/tags/[tagName] 删除远程tag
git show [tag] 查看tag信息
git push [remote] [tag] 提交指定tag
git push [remote] --tags 提交所有tag
git checkout -b [branch] [tag] 新建一个分支,指向某个tag

 

7、查看信息

命令 功能介绍
git status

git status命令的作用是显示仓库文件状态,红色表示工作目录的文件被修改但还没有提交到暂存区,绿色表示已经提交到暂存区。

 

以极简的方式显示文件状态(下面是显示内容解析):git status -s

  • A:本地新增的文件(服务器上没有)
  • C:文件的一个新拷贝
  • D:本地删除的文件(服务器上还在)
  • M:红色为修改过未被添加进暂存区的,绿色为已经添加进暂存区的
  • R:文件名被修改
  • T:文件的类型被修改
  • U:文件没有被合并(你需要完成合并才能进行提交)
  • X:未知状态(很可能是遇到git的bug了,你可以向git提交bug report)
  • ?:未被git进行管理,可以使用git add fileName把文件添加进来进行管理
ls -al 查看详细目录信息
git log 显示当前分支的版本历史
git log --stat 显示commit历史,以及每次commit发生变更的文件
git log -S [keyword] 搜索提交历史,根据关键词
git log [tag] HEAD --pretty=format:%s 显示某个commit之后的所有变动,每个commit占据一行
git log [tag] HEAD --grep feature 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件

1.git log --follow [file]

2.git whatchanged [file]

显示某个文件的版本历史,包括文件改名
git log -p [file] 显示指定文件相关的每一次diff
git log -5 --pretty --oneline 显示过去5次提交
git log --before="yyyy-MM-dd" 显示某个日期之前的记录,如git log --before="2020-01-01"(包含2020年1月1号的记录)
git log --after="yyyy-MM-dd" 显示某个日期之后的记录,如git log --after="2020-01-01"(包含2020年1月1号的记录)
git log --author="name" 查看某个人的提交记录
git log -n 显示前n条记录
git shortlog -sn 显示所有提交过的用户,按提交次数排序
git blame [file] 显示指定文件是什么人在什么时间修改过
git diff 显示暂存区和工作区的差异
git diff --cached [file] 显示暂存区和上一个commit的差异
git diff HEAD 显示工作区与当前分支最新commit之间的差异
git diff [first-branch]...[second-branch] 显示两次提交之间的差异
git diff --shortstat "@{0 day ago}" 显示今天你写了多少行代码
git show [commit] 显示某次提交的元数据和内容变化
git show --name-only [commit] 显示某次提交发生变化的文件
git show [commit]:[filename] 显示某次提交时,某个文件的内容
git reflog 显示当前分支的最近几次提交

 

8、远程同步

命令 功能介绍
git fetch [remote] 下载远程仓库的所有变动
git remote -v 显示所有远程仓库
git remote show [remote] 显示某个远程仓库的信息
git remote add [shortname] [url] 增加一个新的远程仓库,并命名
git pull 从远端库更新内容到本地(相当于svn的update)
git pull [remote] [branch] 取回远程仓库的变化,并与本地分支合并
git push [remote] [branch] 上传本地指定分支到远程仓库,如:git push origin master(同步到远程master仓库)
git push [remote] --force 强行推送当前分支到远程仓库,即使有冲突
git push [remote] --all 推送所有分支到远程仓库
git push origin --delete [branch] 删除远程[branch]分支;例如:git push origin --delete dev

 

9、撤销操作

命令 功能介绍
git checkout [file] 恢复暂存区的指定文件到工作区
git checkout [commit] [file] 恢复某个commit的指定文件到暂存区和工作区
git checkout . 恢复暂存区的所有文件到工作区
git reset [file] 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset --hard HEAD^ 回退到上一个版本(HEAD代表当前版本,有一个^代表上一个版本,以此类推)
git reset --hard d7b5 回退到指定版本(其中d7b5是想回退的指定版本号的前几位)
git reset [commit] 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset --hard [commit] 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --keep [commit] 重置当前HEAD为指定commit,但保持暂存区和工作区不变
git revert [commit] 新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支
git stash 保存当前进度;git stash命令的作用主要如果当前分支所做的修改你还不想提交,但又需要切换到其他分支去查看,就可以使用git stash保存当前的修改。
git stash list 看已经保存的历史记录
git stash pop <历史进度id> 重新应用某个已经保存的进度,并且删除进度记录
git stash apply <历史进度id> 重新应用某个已经保存的进度,但不删除进度记录,如果直接使用git stash默认是使用最近的保存
git stash drop <历史进度id> 删除某个历史进度
git stash clear 删除所有的历史进度

 

10、其他操作

命令 功能介绍
git grep "陈哈哈" 从当前目录的所有文件中查找文本内容
git grep "陈哈哈" v2.5 在某一版本中搜索文本

 

11、.gitignore忽略配置(提交到git时,忽略部分文件)

在根目录下创建.gitignore文件,添加下方内容代表忽略该文件或该文件夹下文件不被Git追踪,即不会提交。

注意:新加.gitignore只能忽略那些原来没有被提交过的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。


  
  1. target/
  2. .settings/
  3. .idea/
  4. .mvn/
  5. *.classpath
  6. *.options
  7. *.project

12、Git常用命令速查表

å¨è¿éæå¥å¾çæè¿°

 

文章来源: chensj.blog.csdn.net,作者:_陈哈哈,版权归原作者所有,如需转载,请联系作者。

原文链接:chensj.blog.csdn.net/article/details/105881098

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。