常用git命令大全

简述:

本文章记录了一些常用的一些git命令。
查询git版本:git --version

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Rempte Directory)就可以分为四个工作区域。文件在这四个区域之间的转换如下:

  • Workspace:工作区,就是你平时存放项目代码的地方

  • Index/Stage:暂存区,用于临时存放你的改动,事实它就是一个文件,保存即将提交到文件列表信息。

  • Repository:仓库区(本地仓库),就是安全存放数据的位置,这里就你提交到所有版本的数据。其实HEAD指向指向最新放入仓库的版本。

  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用户远程数据交换。
    在这里插入图片描述

  • git comfig

  1. 查询与修改用户名
# 查询用户名称
git config --global user.name

# 修改用户名
git config --global user.name "用户名"
  1. 查询与修改邮箱
# 查看邮箱
git config --global user.email

# 修改邮箱
git config --global user.email "serena@example.com"
  1. 查询配置列表
# 查询配置列表
git config --list
  1. 查询配置列表
# git全局设置文件地址查询
git config --global --list --show-origi
  • git clone

    克隆仓库,从现有 Git 仓库中拷贝项目

先使用cd命令进入电脑指定存放该项目的文件夹下。然后使用git克隆命令,从现有git仓库中拷贝项目。

git clone <git仓库地址>

# 示例:
git clone https://github.com/xxxxxxx/clone-project.git

克隆到指定目录

git clone <git仓库地址> <指定目录地址>

# 示例:
git clone https://gitee.com/xxx/clone-project.git /xxx/git-clone-project/clone-project

克隆特定分支

git clone -b <git仓库地址> <指定目录地址>

# 示例:
git clone -b master https://gitee.com/xxx/clone-project.git /xxx/git-clone-project/clone-project
  • git init

1、进入本地创建的项目所在目录下

cd /xxx/xxx/xxx/init-project 

2、初始化仓库使用git init命令

git init 

3、把工作区的内容提交到暂存区,让本地库有提交记录

git add .    
git commit -m '第一次内容提交'

4、添加一个远程仓库配置(git上面要有已创建的仓库)

git remote add origin https://gitee.com/xxxx/init-project.git

5、推送本地分支到远程仓库,并设置上游分支

git push -u origin master
  • git add

你的本地仓库由 git 维护的三棵"树"组成。第一个是你的 工作目录,它持有实际文件;第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。git add 的命令是从你的工作目录把对应文件添加到暂存区。

  1. 添加所有修改文件(常用)
git add .
  1. 添加单个文件
git add <路径下完成的文件名称>

示例:

git add src/main/java/com/example/cloneproject/test1.java
  1. 添加多个文件
git add src/main/java/com/example/cloneproject/test1.java src/main/java/com/example/cloneproject/test2.java
  1. 添加目录
git add src/main/java/com/example/cloneproject
  1. 添加指定类型的文件
git add *.java
  • git commit

git commit 命令是将暂存区内容提交到版本库

 git commit -m '第一次内容提交'
  • git diff

查看工作区和暂存区文件之间的差异

git diff
  • git status

查看当前代码仓库的状态,可以看出哪些文件已更改、添加或删除,以及是否有未提交的更改等。

git status
  • git log

  1. 显示所有commit日志
git log
  1. 显示所有commit日志,将日志缩写为单行显示
git log --pretty=oneline
  1. 查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit
  1. 查看分叉历史,包括:提交历史、各个分支的指向以及项目的分支分叉情况。
git log --oneline --decorate --graph --all
  1. 查看最新3条commit日志数据
git log -3
  1. 查询指定某一个分支的commit日志信息
git log 分支名称
  1. 查询指定文件的提交历史
git log -p 文件名称
  • git reflog

显示操作本地版本库的命令,包括commit和reset等,在回退版本以后又后悔找不到commit id了可以使用此命令查看历史。用来恢复本地错误操作很重要的一个命令。

git reflog

git log 与 git reflog 的区别

  • 用途:git log用于查看提交历史,主要是为了了解项目的开发历程。git reflog则用于查看本地仓库的HEAD和分支引用的变动历史,主要用于恢复丢失的提交或理解引用的变化。

  • 显示的内容:git log显示的是提交对象的历史,包括提交的哈希值、作者、日期和提交信息等。git reflog显示的是HEAD和分支引用的变化历史,包括每次变化的简要说明(如commit、reset等)和对应的提交哈希值。

  • 对象:git log关注的是提交对象,而git reflog关注的是引用(如HEAD、分支)的变化。

  • 适用场景:当需要回顾项目的开发历史或查看特定提交的详细信息时,使用git log。当需要恢复丢失的提交或理解HEAD和分支引用如何变化时,使用git reflog。

  • git pull

从远程仓库拉取代码到本地。git pull == git fetch + git merge

git pull
  • git push

  1. 将文件添加到远程仓库
git push

也可使用在git pull 命令加上 --rebese 使之不产生Merge点, 保证了代码的整洁。

git push
  1. 将本地分支推送至远程仓库
git push -u origin 本地分支名称
  1. 强制提交(慎用!!!

强制push 可能会把所有的本地分支强制覆盖远程分支,同事之前推送的代码会被你抹掉。慎用!!!

git push -f
  • git branch

git branch命令可用于查看、创建、删除分支、重命名分支,通过不同的命令参数实现相应的功能

  1. 查看分支
# 查询本地分支,不显示远程分支,并且在当前分支前面使用 * 标记。
git branch

# -r --remotes只列出远程分支,本地分支不会显示。
git branch -r

# -a --all: 查看所有分支,包含本地分支和远程分支,并且在当前分支前面使用 * 标记。
git branch -a

# -v --verbose: 查看本地分支及其对应的提交记录
git branch -v
  1. 创建分支

git branch 创建分支与 git checkout -b 创建分支的区分:
git branch 创建分支只创建,不会切到新的分支上面。
git checkout -b 创建分支可以直接切到新的分支上面。

# 创建分支,不会切到新创建的分支上面。
git branch 分支名称
  1. 删除分支

需要切换到别的分支上面,可以在当前分支删除当前分支。否则会报错:error: Cannot delete branch ‘xxxx’ checked out at ‘xxxx’

# 删除本地分支,但没推送到远程仓库。
git branch -d 分支名称

# 本地分支已有新的提交记录,但没推送到远程仓库,此时想要删除分支,必须使用 -D
git branch -D 分支名称

# 删除远程分支
git push origin -d 分支名称
# 简写
git push origin :分支名称
  1. 重命名分支
# 重命名当前分支
git branch -m 新分支名称

# 重命名指定分支
git branch -m 老分支名称 新分支名称

重命名未上传远程仓库的分支,分支名修改好后推送到远程仓库即可。如有重命名已经上传到远程仓库中的分支,需要推送到远程仓库后删除远程仓库中老的分支。

# 推送到远程仓库
git push -u origin 新分支名称

# 删除远程仓库中的 老分支
git push origin -d 老分支名称
  • git checkout

  1. 切换本地分支
git checkout
  1. 创建并切换分支
git checkout -b 新分支名称
  1. 放弃修改
# 放弃所有工作区的修改
git checkout .

# 放弃对指定文件的修改
git checkout -- 文件名称
# 例如:
git checkout -- a.txt

# 放弃工作区和暂存区的所有修改
git checkout -f
  • git reset

适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。

  1. 提交commit但是未进行push,且退回之后保留当前commit的内容信息。
git reset commit的版本id
# 例如:
git reset 5dfcf9ef50d2785be1d04abdd89de434d376e568
  1. 提交commit但是未进行push,退回之后丢弃修改的内容信息。
# --hard 丢弃修改的内容
git reset --hard commit的版本id
# 例如:
git reset --hard 5dfcf9ef50d2785be1d04abdd89de434d376e568
  1. 使用“git push -f”强制提交(commit已经push的使用强制提交)

commit 已经push 使用 git reset --hard 版本回退后提交会提示 Push Rejected,因为我们本地库HEAD指向的版本比远程库的要旧。如果点击 merge 就会又回去了,完全没退回指定的版本。
在这里插入图片描述
此时应该执行 git push -f 强制提交

git push -f

补救:
如果我们通过git reset --hard将版本回退到之前的版本了,那我们还是可以补救的,先通过git reflog命令,找到要回退的commitId,然后通过命令:git reset --hard commitId来恢复。

  1. Reset的四种模式及使用场景
  • soft 选项:

    • 效果:不影响工作目录和暂存区,已修改的文件保留在暂存区,工作目录中的文件也不受影响。
    • 使用场景:通常用于取消上一次提交,将更改重新放入暂存区,以便进行修改后再次提交。
  • mixed选项:(这是Git reset的默认模式)

    • 效果:不影响工作目录,暂存区的所有内容都会被清空。如需重新提交需使用“git add .”命令。
    • 使用场景:通常用于取消上一次提交,但保留更改在工作目录中,不放入暂存区。
  • hard选项:

    • 效果:清除工作目录和暂存区,工作目录和暂存区的所有内容都会被恢复到指定提交的状态。
    • 使用场景:当你确定不需要当前工作区的更改时使用。要非常小心,因为此操作不可逆,未提交的更改将被永久删除。
  • keep选型:

    • 效果:当前分支指向的提交和暂存区会被重置到指定的提交,工作区的文件会被保留。任何与指定提交冲突的文件会被保留,并且保持未跟踪状态。 保留工作区和HEAD之间的差异
    • 使用场景:当你确定不需要当前工作区的更改且想要保留工作区的内容时使用。
  • git revert

如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。

  1. 常规的commit
# 1.查询需要反做的版本
git log --pretty=oneline

# 2.使用git revert -n 版本号进行反做
git revert -n 版本号

# 3.这里可能会冲突,需要手动修改冲突文件,然后提交
git add .
git commit -m '提交的内容'

# 4. 使用git push命令推送到远程仓库
git push
  1. merge后的commit

merge commit 的revert:加上-m表示撤回哪一个分支的。它的数据是1或2.
在这里插入图片描述

# 保留第一个分支为主线
git revert 版本号 -m 1 
  • git merge

git merge 分支名

可能会产生冲突,有冲突解决后进行commit提交与push推送到远程仓库。

  • git switch

在 git 2.23 版本中新增了 switch 和 restore命令,用于替代 checkout 命令,进而分化 checkout 命令的职责。换言之,checkout 将逐渐退出历史舞台

  1. 切换分支
# 如果是切换到一个没有的分支上去,git会报:fatal: invalid reference: <branchName>
git switch 分支名称
  1. 创建新分支
# 如果分支已存在,git会报:fatal: A branch named ‘test2’ already exists. 我们可以使用git branch 查看当前本地有哪些分支。
git switch -c 分支名称
  1. 以一个提交commit来创建一个分支
# 以一个提交commit来创建一个分支
git switch -c 分支名称 commitId
# 例如:
git switch -c test1 ae15cf5b662f5e9f9e65836c9c1b32f38e199864
  1. 切换到某一个commit但是不创建新的分支,可以查看这个记录是的修改情况
# 切换到某一个commit但是不创建新的分支,可以查看这个记录是的修改情况
git switch --detach commitId
# 例如:
git switch --detach 9806360
  • git stash

在一个分支开发新功能,还没开发完毕,做到一半时有反馈紧急bug需要处理,但是新功能开发了一半又不想提交。

  1. 隐藏当前工作进度
# 隐藏当前工作的内容,可自定义备注,方便查找。
git stash save '备注内容'

# 隐藏当前工作的内容,不可自定义备注,不方便查找
git stash
  1. 查看隐藏的工作信息列表
# 查看隐藏的工作信息列表
git stash list
  1. 恢复指定的隐藏工作信息
# 恢复指定的隐藏工作信息,但是不会删除隐藏的工作信息
# n 表示stash list 结果里面的序号 0、1、2、3
git stash apply n
# 示例:
git stash apply 0
  1. 删除隐藏的工作信息
# n 表示stash list 结果里面的序号 0、1、2、3
# 如果只运行 git stash drop 而不指定名称,则会默认删除最新的 stash 记录
git stash drop n
# 示例:
git stash drop 0
  1. 恢复最新的进度到工作区并删除该隐藏的工作信息
# 恢复最新的进度到工作区并删除该隐藏的工作信息
git stash pop
  • git cherry-pick

对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。
这时分两种情况。

  • 你需要另一个分支的所有代码变动,那么就采用合并(git merge)。
  • 你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。

Cherry pick直译为捡樱桃🍒,它的功能是把已经存在的commit进行挑选,然后重新提交。比较合适的一个场景是把A分支的某次或者多次的提交也提交到B分支上。

git cherry-pick commitId
# 示例
git cherry-pick 9806360
  1. 切换到A分支
git checkout A
  1. 找到需要转移的commit
git log --oneline --graph
  1. 切换回B分支
git checkout B
  1. 把 A 分支下需要转移的commit 重新提交到 B 分支下面
git cherry-pick 

当执行完 git cherry-pick以后,将会生成一个新的提交,这个新的提交的hash值和原来的不同,但标志名称一样。

如遇到冲突,可手动解决。
在这里插入图片描述

  • git remote

  1. 查看本地添加了哪些远程分支地址
# 查看本地添加了哪些远程分支地址
git remote
  1. 查看本地仓库中已配置的远程仓库
# 查看本地仓库中已配置的远程仓库
git remote -v
  1. 关联远程仓库
# 关联远程仓库
git remote add origin 远程地址
  1. 重命名仓库地址
# 重命名仓库地址
git renite rename 老仓库地址 新仓库地址
  1. 删除远程仓库地址
# 删除远程仓库地址
git remote remove origin
  • git rebase

如果当你在commit完成后,push代码时,刚好别人也进行了提交。这个时候pull之后会产生一个merge的一个节点,为了使代码整洁,可以使用git rebase处理一下。

git rebase
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值