常用Git命令总结,看这一篇就够了

学习资料

最好的学习资料当然还是去官网
Git是一个分布式的版本控制系统。
GitHub是一个基于Git做版本控制的代码托管平台。类似的还有Gitee, BitBucket等。

注意:
在Windows上使用Git,需要下载 Git for windows 软件,在官网下载,速度比较慢,可以找相关资源网站去下载
MINGW32 / MINGW64
可以去下面的网站下载:

http://npm.taobao.org/mirrors/git-for-windows/

常用的其他命令

Git bash是支持Linux命令的,常用linux命令也是可以在上面使用的

cd "<path>"  直接进入到这个路径
例子: cd /d/test	进入D:\test路径,注意写法
cd ..  退回上一层路径
pwd  打印出当前工作路径
pwd -P	显示出实际路径(注意P要大写)
cd ~  进入到用户的路径
ls   罗列出当前路径下的文件
ls –l	显示一个文件的属性以及文件所属的用户和组
ls -ah  罗列出当前路径下的文件,包括隐藏文件
cat <file>  显示该文件内容
....

Linux命令,可以看我的另一篇文章:

常用Linux命令总结,看这一篇就够了

快捷键

git bash上的快捷键
复制:Ctrl + Ins
粘贴:Shift + Ins

git常用命令

帮助命令

非常有用的指令。
通过该指令,可以查看具体指令的帮助文档,而无需联网。

git help <verb>
# verb输入具体指令,例如: git help branch
git <verb> --help
man git-<verb>

初次使用

git init
# 初始化git仓库。先进入到要初始化的仓库的文件夹,再执行此命令

#第一次使用时,需要配置 用户名和邮箱等:
git config --global user.name "填入自己的用户名"
git config --global user.email "填入自己的邮箱地址"


git reflog    用来记录你的每一次命令
gitk [filename]		查看特定文件的历史修改记录

ssh-keygen

ssh-keygen -t rsa -C "youremail@example.com"
# 如果使用ssh协议,用上面命令产生ssh key

现在一般都是使用HTTPS协议

git clone

git clone <git url> [new folder name]
# 克隆远程代码,后面的new folder name, 可以不用写,如果不写就以clone的项目的名字创建一个文件夹
# 注意:
# 使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写

git config

git config
# 查看当前git仓库的配置信息
git config --get remote.origin.url
# 查看远程仓库地址
git config -l
# 查看当前git环境详细配置
git config --list
# 和上面的是一样的效果。
git config <key>
# 检查Git的某一项设置,使用上面查出来的key
git config --system --list
# 查看系统配置
git config --global --list
# 查看当前用户global配置

第一次使用时,需要配置 用户名和邮箱等:
git config --global user.name "填入自己的用户名"
git config --global user.email "填入自己的邮箱地址"

详细细节可以看下面的文章:

Git config配置详讲

git status

检查当前文件状态,是否有修改等

git status

git status -s 或 git status--short 
# 得到一种更为紧凑的格式输出
# 新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。注意 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。

git add

用来跟踪文件

git add <file>
# 添加文件到版本库。注意,可反复多次使用。可以添加多个文件(文件名之间用空格相隔)
git add .
# 会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u
# 仅监控已经被add的文件(即tracked file),会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A
# 是上面两个功能的合集(git add --all的缩写)

git commit

提交更新。
这种方式会启动文本编辑器以便输入本次提交的说明。(默认会启用 shell 的环境变量 $EDITOR 所指定的软件,一般都是 vim 或 emacs。当然也可以使用 git config --global core.editor 命令设定你喜欢的编辑软件。)

Linux vim操作

git commit -m "comments"
# 提交文件到仓库。双引号中,写提交说明,即log
# 注意:提交时记录的是放在暂存区域的快照

git log

用来查看提交历史。
会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明

git log
# 查看提交记录,显示log,从最近到最远显示
git log -n
# 显示最近n条log,n可以为任何数字
git log --pretty=oneline
# 加上该参数,简化log,每次提交只显示一行。 前面一串是 commit id(版本号) ,SHA1计算出来; 参数还有:oneline,short,full,fuller 和 format(后更指定格式)
git log --graph
# 以界面的形式显示提交日志
git log --graph --pretty=oneline --abbrev-commit
git log --pretty=oneline <fileName>
# 查看某一个文件的修改历史,oneline 将每个提交放在一行显示,查看的提交数很大时非常有用,另外还有 short,full 和 fuller 可以用
git log --stat
# 显示每次更新的文件修改统计信息
git log -- <fileName>
# 查看文件的历史修改记录
git log -p <fileName>
# 可以显示该文件每次提交的diff
git show <commit-id> <fileName>
# 查看某次提交中的某个文件变化

git log 的常用选项

选项说明
-p按补丁格式显示每个更新之间的差异
–stat显示每次更新的文件修改统计信息。
–shortstat只显示 --stat 中最后的行数修改添加移除统计
–name-only仅在提交信息后显示已修改的文件清单
–name-status显示新增、修改、删除的文件清单
–abbrev-commit仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
–relative-date使用较短的相对时间显示(比如,“2 weeks ago”)
–graph显示 ASCII 图形表示的分支合并历史
–pretty使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和format(后跟指定格式)

git log --pretty=format 常用的选项

选项说明
%H提交对象(commit)的完整哈希字串
%h提交对象的简短哈希字串
%T树对象(tree)的完整哈希字串
%t树对象的简短哈希字串
%P父对象(parent)的完整哈希字串
%p父对象的简短哈希字串
%an作者(author)的名字
%ae作者的电子邮件地址
%ad作者修订日期(可以用 --date= 选项定制格式)
%ar作者修订日期,按多久以前的方式显示
%cn提交者(committer)的名字
%ce提交者的电子邮件地址
%cd提交日期
%cr提交日期,按多久以前的方式显示
%s提交说明
例如:
git log --pretty=format:"%h %s" --graph

git diff

比较工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容

语法大纲如下:
git diff [<options>] [<commit>] [--] [<path>…​]
git diff [<options>] --cached [<commit>] [--] [<path>…​]
git diff [<options>] <commit> <commit> [--] [<path>…​]
git diff [<options>] <blob> <blob>
git diff [<options>] --no-index [--] <path> <path>

常用案例:

git diff <file>
# 查看该文件difference, 显示的格式正是Unix通用的diff格式
git diff --cached
# 若要查看已暂存的将要添加到下次提交里的内容
# Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的,但更好记些
git diff HEAD -- <file>
# 命令可以查看工作区和版本库里面最新版本的区别
git diff -w <fileName>
# 来确认代码自动合并的情况
git diff <branch1> <branch2>
# 比较两个分支的区别
git diff [branchA] [branchB] >>diff.diff
# 会在当前目录下生成一个.diff 文件, 打开后查看
git diff branch1 branch2 --stat
# 加上 --stat 是显示文件列表, 否则是文件内容diff

git diff -C -M <commit> <commit> -- "文件路径"

git branch

详细介绍在下面的文章中:

git branch

git checkout

git checkout
# 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
git checkout .
# 还原本地所有修改的。没有的提交的,都返回到原来的状态

git checkout <fileName> 或者
git checkout -- <fileName> 
# 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时

git checkout <branchName>
# 切换到该分支,并开始开发
git checkout -b <branchName>
# 新建一个分支,并同时切换到那个分支
git checkout -b <branchName> <originBranchName>
# 新建一个分支,并与远程分支关联,同时切换到本地新建的这个分支

git checkout -f <branchName>
# 强制切换分支

git reset

在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

git reset --hard HEAD^
# 回到上一个版本
git reset --hard commit_id
# 就可以回到想要的版本

git rm

从工作目录中删除指定的文件,同时从已跟踪文件清单中移除

rm fileName
# 在工作区中删除文件,如果提交,需要先 git add . 命令
git rm fileName
# 确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
git rm <file> --cached
# 从版本库中删除文件,但不删除文件,文件依然保留在磁盘中
git rm <folderName>
# 在本地仓库删除文件夹 
git rm -r <folderName>/
# 从版本库中删除文件夹,相当于删除再执行了add操作(由红变绿);
# 此处-r表示递归所有子目录,如果你要删除的,是空的文件夹,此处可以不用带上-r。

git remote

查看已经配置的远程仓库服务器

git remote
# 列出所有远程主机
git remote -v
# 查看git远程控制,可以查看远程主机的网址
git remote remove origin
# 删除和远程的关联
git remote rename
# 修改一个远程仓库的简写名
git remote add origin <remote git repository url>
# 将本地仓库与远程仓库关联
# 添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库

# Git 仓库地址修改方法:
git remote set-url origin [NEW_URL]

git remote show [remote-name]
# 查看某一个远程仓库的更多信息, 默认remote-name = origin
# git remote show origin

git fetch

访问远程仓库,从中拉取所有你还没有的数据。执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看

git fetch [remote-name]
# git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。当准备好时你必须手动将其合并入你的工

git show

git show <commitId>
# 根据Commit id查看某一次提交
git show <tagName>
# 查看tag内容
git show <commitId> --name-only
# 仅在提交信息后显示已修改的文件清单。
git show <commitId> --stat
git show <commitId> <fileName>
# 可以显示某次提交的某个内容的修改信息

git stash

git stash
# 暂存起来(当前分支有修改,但是还没有提交,如果想要切换分支,可以用该指令先暂存)
# 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

git stash list
# 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

git stash drop <stashName>
# 删除指定的stash版本

git stash pop
# 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。
# 由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

git stash pop <stashName>
# 恢复指定的stash版本

git stash show <stashName>
# 查看stash里具体的内容,默认显示格式为 diffstat
# 显示修改在stash状态与原版本之间的不同变化

git stash clear 
删除所有缓存的stash。

git tag

给历史中的某一个提交打上标签,以示重要

git tag
# 显示tag
git show <tagName>
# 具体显示某一个tag
git tag -a <tagName> -m "my comments"
# 创建tag
# 例如:
git tag -a v1.0.0.0 -m "my comments"

git tag -d <tagName>
# 删除tag
git push origin <tagName>
# 推送标签到远程仓库
git push origin --tags
# 一次性推送本地所有新增标签到远程仓库去
git push origin --delete tag <tagName>
# 删除tag,在Git v1.7.0 之后,可以使用这种语法

git checkout tags/<tagName>
# 从当前分支切换到某一个具体的tag处

git pull

git pull
# 相当于是从远程获取最新版本并merge到本地,如果省略本地分支,则自动合并到当前分支上;
# 相当于执行了下面2个操作:用master举例
	git fetch origin
	git merge origin/master
	
git pull <远程库名> <远程分支名>:<本地分支名>
# 操作就可以从远程库中获取某个分支的更新,再与本地指定的分支进行自动merge(即使本地不存在这个分支)
例如:
git pull origin develop:develop

git pull <远程库名> <远程分支名>
# 如果是要与本地当前分支merge,则冒号后面的<本地分支名>可以不写

git push

git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数(-u | --set-upstream),Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
通过git config 命令就可以发现多了两条配置,分别是该分支的具体绑定。

git push origin master
# 把本地master分支的最新修改推送至远程仓库

git push origin <localBranch>:<remoteBranch>
#这个操作,localBranch必须为你本地存在的分支,remoteBranch为远程分支,如果remoteBranch不存在则会自动创建分支。
注意:remoteBranch前面不要加origin,否则就是新建分支了;

在Git v1.7.0 之后,可以使用这种语法删除远程分支:
git push origin --delete <branchName>
# 否则,可以使用下面这种语法,推送一个空分支到远程分支,其实就相当于删除远程分支:
git push origin :<branchName>

git reflog

git reflog
显示当前分支的最近几次提交

git blame

git blame <filepath>
git blame 记录了某个文件的更改历史和更改人

git -C

语法:

git -C <other-git-repo-path> [git-command] 

指定其它路径的仓库 执行命令
注意,-C 要在命令之前

例如:

git -C d:/testRepo status

git ignore 文件

创建.gitignore文件来设置 git 要忽略的文件模式:

官方文件列列表:

https://github.com/github/gitignore

  1. 所有空行或者以 # 开头的行都会被 Git 忽略。用于在git ignore文件中写注释。
  2. 可以使用标准的 glob 模式匹配。
    所谓的 glob 模式是指:shell 所使用的简化了的正则表达式
    星号(*)匹配零个或多个任意字符;
    [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
    问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
    使用两个星号(*)表示匹配任意中间目录,比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。
  3. 匹配模式可以以(/)开头防止递归。
     注意这个命令。比较实用。指在当前路径,不是子路径。
  4. 匹配模式可以以(/)结尾指定目录。
  5. 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

分支管理策略

简单来说,
主分支 master 永远是可用的稳定版本
开发分支 develop 是正在测试但未上线的版本
功能和特性开发在 feature 分支进行,完成后合并到 develop 进行测试
线上紧急的 Bug 修正开 hotfix 分支进行,修正完成后合并到 master

命名:
master
develop
feature/xxx
hotfix/xxx

release/版本号
版本release之前打对应版本的tag

Git常见问题汇总

Git常见问题汇总

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值