关于git的基本操作

1、初次使用git必用命令

git config 第一次使用git或者刚安装的git时,使用此命令设置身份Name 和 Eamail 地址。并且每次提交时会使用此信息

lua 复制代码
git config --global user.name "用户名"
git config --global user.email 邮箱

git version 检查当前使用的git版本号

git version
git -v

2、操作远程仓库命令

git init 初始化仓库创建新项目使用该命令进行项目初始化,创建一个空白的存储库,用于存储源代码

csharp 复制代码
git init

git clone 克隆存储库命令,将远程仓库代码克隆到本地

git clone 和git init区别

  1. 将尚未进行版本控制的本地目录转换为 Git 仓库;

  2. 从其它服务器 克隆 一个已存在的 Git 仓库。

    git clone " 远程仓库url "

git add 命令会把所有的代码文件或修改后的文件添加到存储库中。此命令提供了添加文件和文件夹的不同选项。

csharp 复制代码
git add *      //添加所有文件到暂存区
git add .      //添加所有文件到暂存区
git add -u .   //-u 表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件
git add -A .   //-A 表示将所有的已跟踪的文件的修改与删除和新增的未跟踪的文件都添加到暂存区
git add *.html
git add *.txt  //添加某个文件类型到暂存区,比如所有的 .html 文件
git add index/ //添加整个文件夹到暂存区,比如index文件夹
git add index/index.html //添加某个文件或者某个文件夹中的某个文件到暂存区 ,比如 index 下的 index.html 文件

git commit 将工作区内容或暂存区内容提交到版本库

ini 复制代码
# 将暂存区内容提交到版本库, 进入 vi 命令界面输入提交信息
git commit

# 将某些已被跟踪的文件提交到版本库(包含工作区和版本库)
git commit [file1] [file2] [...]

# 将暂存区内容提交到版本库, 无需进入 vi 命令界面输入提交信息
git commit -m [message]

# 跳过 git add, 将所有已被跟踪的文件更改提交到版本库
git commit -am [message]

# 使用一次新的commit, 替代上一次提交
# 如果代码没有任何新变化, 则用来改写上一次commit的提交信息
git commit --amend -m [message]

git status 显示暂存区文件和当前 HEAD 提交之间有差异的路径,工作区和暂存区文件之间有差异的路径,以及工作区中没有被 Git 跟踪的路径 (也没有被 gitignore 忽略) 。

css 复制代码
git status [<选项> ...​] [--] [<路径名> ...​]   //[ ] 表示可选,...表示可以有多项。

git branch 命令主要用来处理跟分支有关系的功能,比如创建分支、删除分支、查看本地分支、查看远程分支等

java 复制代码
git branch          //查看本地分支
git branch -v       //查看本地分支+上次提交的信息
git branch -vv      //查看本地分支+上次提交的信息+本地和远程分支的关系
git branch -vv -a   //查看本地分支+上次提交的信息+本地和远程分支的关系+远程分支 (如果不想显示提交的信息,也可以去掉-vv参数)
git branch -r       //只查看远程分支
git branch -d (branchName) //删除本地分支
git push <主机名> -d <分支名>git push <主机名> --delete <分支名>git push <主机名> :<分支名>         //删除远程分支
git checkout (branchName)          //切换本地分支
git branch (branchName) //创建本地分支git checkout -b (branchName) //创建本地分支并切换
git push <远程主机名> <本地分支名>:<远程分支名>        //创建远程分支

git checkout 本意是检出的意思,也就是将某次commit的状态检出到工作区;所以它的过程是先将HEAD指向某个分支的最近一次commit,然后从commit恢复index,最后从index恢复工作区。

scss 复制代码
git checkout (branchName)       //切换分支
git checkout -b (branchName)   //创建并切换到新的分支

3、git进阶

git remote 如果需要与远程仓库链接,必须使用此命令。此命令会将本地存储库连接到远程。

csharp 复制代码
git remote //不带参数,列出已经存在的远程分支
git remote -v | --verbose //列出详细信息,在每一个名字后面列出其远程url,此时, -v 选项(译注:此为 --verbose 的简写,取首字母),显示对应的克隆地址。
git remote add url //添加一个远程仓库
git remote rm name //删除远程仓库
git remote rename old_name new_name //修改仓库名

git push 令用于从将本地的分支版本上传到远程并合并

perl 复制代码
git push <远程主机名> <本地分支名>:<远程分支名>     //将本地的分支版本上传到远程并合并
git push <远程主机名> <本地分支名>                 //如果本地分支名与远程分支名相同,则可以省略冒号

以下命令将本地的 master 分支推送到 origin 主机的 master 分支
$ git push origin master === git push origin master:master
如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
$ git push --force origin master
删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支
$ git push origin --delete master

git push --set-upstream 先把本地的当前分支推送到远程仓库origin的main分支,然后把本地的当前分支关联到远程仓库origin的main分支

arduino 复制代码
git push --set-upstream <remote> <branch>   //其中,''表示远程仓库的名称或URL,''表示要推送的本地分支的名称。

git fetch 是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中

xml 复制代码
git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
如果只想取回特定分支的更新,可以指定分支名
git fetch <远程主机名> <分支名> //注意之间有空格

git pull 取回远程主机某个分支的更新,再与本地的指定分支合并

ruby 复制代码
git pull [options] [<repository> [<refspec>...]]
$ git pull <远程主机名> <远程分支名>:<本地分支名>
要取回origin主机的next分支,与本地的master分支合并,需要写成下面这样
$ git pull origin next:master
如果远程分支(next)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写为
$ git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再执行git merge。
$ git fetch origin
$ git merge origin/next
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动"追踪"origin/master分支。Git也允许手动建立追踪关系
$ git branch --set-upstream master origin/next
上面命令指定master分支追踪origin/next分支。如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名
$ git pull origin
上面命令表示,本地的当前分支自动与对应的origin主机"追踪分支"(remote-tracking branch)进行合并。如果当前分支只有一个追踪分支,连远程主机名都可以省略
$ git pull
上面命令表示,当前分支自动与唯一一个追踪分支进行合并。如果合并需要采用rebase模式,可以使用--rebase选项。
$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

git fetch和git pull的区别

git fetch:相当于是从远程获取最新版本到本地,不会自动合并。

git pull:相当于是从远程获取最新版本并merge到本地

git stash 会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录

ruby 复制代码
git stash save "test-cmd-stash"     //存储一个test-cmd-stash到本地存储列表git stash list           //查看缓存列表
git stash pop            //恢复之前缓存的工作目录,这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下
git stash apply          //将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝git stash list           //查看现有stash
git stash drop           //移除stash
git stash show           //查看指定stash的diff

git log 查看所有之前的提交,最近的提交出现在最前面。

less 复制代码
git log [<options>] [<since>..<until>] [[--] <path>...]  //如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者、提交日期、和提交说明

常用参数

  1. -p:按补丁格式显示每个更新的差异,比下一条--stat命令信息更全。
  2. --stat:显示每次提交修改文件的统计信息,每个提交都列出了修改过的文件,以及其中添加和移除的行数,并在最后列出所有增减行数小计。
  3. --shortstat:只显示--stat中最后的行数添加、修改、删除的统计。
  4. --name-only:仅在提交信息后,显示已修改的文件清单。
  5. --name-status:显示新增、修改、删除的文件清单。
  6. --abbrev-commit:仅显示SHA-1校验和的前几个字符,而非所有的40个字符。
  7. --relative-date:使用较短的相对时间,而不是完整格式显示日期(比如"2 weeks ago")。
  8. --graph:在日志旁以ASCII图形显示分支与合并历史。
  9. --online:列表的形式查看历史版本记录,--pretty=oneline --abbrev-commit 合用的简写。
  10. --pretty:使用其他格式显示历史提交信息。可用的选项包括onelineshortfullfullerformat(用来定义自己的格式)

git shortlog 命令会显示来自 git log 命令的摘要。如果只对简短的摘要感兴趣,此命令就非常有用了。

css 复制代码
git shortlog [<options>] [<revision range>] [[--] <path>...​]
git log --pretty=short | git shortlog [<options>]

4、git高级命令

git rebase 可以提取我们在A分支上的改动,然后应用在B分支的代码上

css 复制代码
git rebase -i  [startpoint]  [endpoint]          //-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作

git rebase和git rebase

  • git merge:当需要保留详细的合并信息的时候建议使用,特别是需要将分支合并进入master分支时

  • git rebase:当发现自己修改某个功能时,频繁进行了git commit提交时,发现其实过多的提交信息没有必要时使用,分支多,内容多时也可以考虑使用

git bisect 命令可以帮助查找糟糕的提交。

xml 复制代码
git bisect <subcommand> <options>

git cherry-pick "挑拣"提交,它会获取某一个分支的单笔/多笔提交,并作为一个新的提交引入到你当前分支上

xml 复制代码
git cherry-pick <commitHash>        //将指定的提交(commit)应用于其他分支
转移多个提交
git cherry-pick <HashA> <HashB>


转移到另一个代码库
git remote add target git://gitUrl
上面命令添加了一个远程仓库target。然后,将远程代码抓取到本地。
git fetch target
上面命令将远程代码仓库抓取到本地。接着,检查一下要从远程仓库转移的提交,获取它的哈希值
git log target/master
最后,使用git cherry-pick命令转移提交
git cherry-pick <commitHash>

git blame 追溯一个指定文件的历史修改记录

scss 复制代码
git blame [filename] 
git blame的具体显示格式是
commit ID  (代码提交作者  提交时间  代码位于文件中的行数)  实际代码

git tag 主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 ...这样的标签

xml 复制代码
git tag <tagName> //创建本地tag
git push origin <tagName> //推送到远程仓库
若存在很多未推送的本地标签,你想一次全部推送的话:
git push origin --tags
以上是基于本地当前分支的最后的一个commit 创建的 tag ,但是如果不想以最后一个,只想以某一个特定的提交为tag ,也是可以的,只要你知道commit 的id。
git log --pretty=oneline //查看当前分支的提交历史 里面包含 commit id
git tag -a <tagName> <commitId>
git show <tagName>
查看本地所有 tag:
git tag 或者 git tag -l
查看远程所有 tag:
git ls-remote --tags origin
本地 tag 的删除:
git tag -d <tagName>
远程 tag 的删除:
git push origin :refs/tags/<tagName>

git verify-commit 使用 GPG、SSH 或 S/MIME,您可以在本地对标签和提交进行签名

sql 复制代码
git verify-commit <commit>

git verify-tag 检查标签的 GPG 签名

perl 复制代码
git verify-tag [--format=<format>] <tag>...​

git diff 比较文件的差异

lua 复制代码
情景一:查看工作区和暂存区之间文件的差异
git diff 命令,默认查看的就是 工作区 和 暂存区之间文件的差异

1.git diff : 查看工作区和暂存区之间所有的文件差异
2.git diff -- 文件名:查看具体某个文件 在工作区和暂存区之间的差异
3.git diff -- 文件名1 文件名2 文件名3:查看多个文件在工作区和暂存区之间的差异
【注意】:查看具体文件的时候 -- 和文件名 之间有一个 空格,文件名1 和 文件名2 和 文件名3之间也有空格git diff -- 文件名1 文件名2 查看文件的差异 

情景二:查看工作区和版本库之间文件的差异git diff HEAD : 查看工作区与最新版本库之间的所有的文件差异

git diff 具体某个版本 : 查看工作区与具体某个提交版本之间的所有的文件差异
git diff HEAD -- 文件名 : 查看工作区与最新版本库之间的 指定文件名的文件差异
git diff HEAD -- 文件名1 文件名2 文件名3 :查看工作区与最新版本库之间的 指定文件名的多个文件差异
git diff 具体某个版本 -- 文件名 : 查看工作区与具体某个版本之间的 指定文件名的文件差异
git diff 具体某个版本 -- 文件名1 文件名2 文件名3 :查看工作区与最具体某个版本之间的 指定文件名的多个文件差异

情景三:查看暂存区和版本库之间文件的差异git diff --cached : 查看暂存区和 上一次提交 的最新版本(HEAD)之间的所有文件差异
git diff --cached 版本号 : 查看暂存区和 指定版本 之间的所有文件差异
git diff --cached -- 文件名1 文件名2 文件名3 : 查看暂存区和 HEAD 之间的指定文件差异
git diff --cached 版本号 -- 文件名1 文件名2 文件名3 : 查看暂存区和 指定版本 之间的指定文件差异


情景四:查看不同版本库之间文件的差异git diff 版本号1 版本号2 : 查看两个版本之间的差异
git diff 版本号1 版本号2 -- 文件名1 文件名2 : 查看两个版本之间的指定文件之间的差异
git diff 版本号1 版本号2 --stat : 查看两个版本之间的改动的文件列表
git diff 版本号1 版本号2 src : 查看两个版本之间的文件夹 src 的差异

git citool 基于 Tcl / Tk 的图形界面用于查看修改后的文件,将它们放入索引,输入提交消息并将新提交记录到当前分支。该接口是交互程序较少的替代git commit方案

git citool
相关推荐
W、明义7 小时前
IDEA git提交时如何忽略某个文件或文件夹
java·git·intellij-idea
我是哈哈hh7 小时前
Linux环境基础开发工具的使用_yum源_vim_Git控制器
linux·运维·c++·git·vim·1024程序员节
待磨的钝刨8 小时前
四期书生大模型实战营(【基础岛】- 第1关 | 书生·浦语大模型开源开放体系)
linux·服务器·git·python
single5949 小时前
c++学习:封装继承多态
开发语言·c++·git·vscode·学习
焦糖酒10 小时前
Git通讲-第四章:Git的未来与我的感悟
git
厌世小晨宇yu.13 小时前
Git超详细笔记包含IDEA整合操作
笔记·git·intellij-idea
多练项目13 小时前
公开仓库改私有再配置公钥后Git拉取仍需要输入用户名的问题
运维·git
焦糖酒14 小时前
Git通讲-第二章(3):分支模型
git
代码对我眨眼睛14 小时前
配置多公钥在多平台使用Git
git·配置多公钥
谁呛我名字14 小时前
Git 入门篇(三)
git