Git常用操作

目录

    • [1 初始化](#1 初始化)
    • [2 仓库](#2 仓库)
    • [3 四个区域](#3 四个区域)
    • [4 文件状态](#4 文件状态)
    • [5 基本概念](#5 基本概念)
    • [6 特殊文件](#6 特殊文件)
    • [7 添加和提交](#7 添加和提交)
    • [8 分支](#8 分支)
    • [9 合并分支](#9 合并分支)
    • [10 撤销和恢复](#10 撤销和恢复)
    • [11 查看状态](#11 查看状态)
    • [12 stash](#12 stash)
    • [13 远程仓库](#13 远程仓库)
    • [14 GitFlow](#14 GitFlow)
    • [15 参考](#15 参考)

1 初始化

查看版本

git -v

配置用户名

git config --global user.name "Zhang Beihai"

配置邮箱

git config --global user.email "zhizi@wto.com"

存储配置

git config --global credential.helper store

2 仓库

创建一个新的本地仓库(省略project-name则在当前目录创建)

git init <project-name>

克隆远程仓库

git clone <url>

3 四个区域

  • 工作区(Working Directory)

资源管理器中实际看到的目录

  • 暂存区(Stage/Index)

暂存区也叫索引,用来临时存放未提交的内容,一般在.git目录下的index中。

  • 本地仓库(Repository)

Git在本地的版本库,仓库信息存储在.git这个隐藏目录中。

  • 远程仓库(Remote Repository)

托管在远程服务器上的仓库,如GitHub、GitLab、Gitee。

4 文件状态

  • 已修改(Modified)

修改了但是没有保存到暂存区的文件

  • 已暂存(Staged)

修改后已经保存到暂存区的文件

  • 已提交(Committed)

暂存区文件提交到本地仓库后的状态。

5 基本概念

  • main/master

    默认主分支

  • origin

    默认远程仓库

  • HEAD

    指向当前分支的指针

  • HEAD^

    上一个版本

  • HEAD~4

    上四个版本

6 特殊文件

  • .git

    Git仓库的元数据和对象数据库

  • .gitignore

    忽略文件,不需要提交到仓库的文件

  • .gitattributes

    指定文件的属性,比如换行符

  • .gitkeep

    使空目录被提交到仓库

  • .gitmodules

    记录子模块的信息

  • .gitconfig

    记录仓库的配置信息

7 添加和提交

添加一个文件到仓库

git add <file>

添加所有文件到仓库

git add .

提交所有暂存区的文件到仓库

git commit -m "message"

提交所有已修改的文件到仓库

git commit -am "message"

8 分支

查看所有本地分支,-r 查看远程分支,-a查看所有分支

git branch

创建一个新分支

git branch <branche-name>

切换到指定分支,并更新工作区

git checkout <branch-name>

切换分支推荐使用

git switch <branch-name>

创建一个新分支,并切换到该分支

git checkout -b <branch-name>

删除一个已经合并的分支

git branch -d <branch-name>

删除一个分支,不管是否合并

git checkout -D <branch-name>

给当前提交打上标签,通常用于版本发布

git tag <tag-name>

9 合并分支

合并分支a到分支b,--no-ff参数表示禁用Fast forward模式,合并后的历史有分支,能看出曾经做过合并,而-ff参数表示使用Fast forward模式,合并后的历史变成一条直线

git merge --no-ff -m "message" <branch-name>
git merge --ff -m "message" <branch-name>

合并&挤压(squash)所有提交到一个提交

git merge --squash <branch-name>

rebase 不会产生新的提交,而是把当前分支的每一个提交都"复制"到目标分支上,然后再把当前分支指向目标分支,而merge会产生一个新的提交,这个提交有两个分支的所有修改。

rebase操作可以把本地未push的分叉提交历史整理成直线,看起来更直观。但是,如果多人写作时,不要对已经推送到远程的分支执行rebase操作。

git checkout <dev>
git rebase <main>

10 撤销和恢复

移动一个文件到新的位置

git mv <file> <new-file>

从工作区和暂存区中删除一个文件

git rm <file>

从索引/暂存区中删除文件,但是本地工作区还在,只是不希望这个文件被版本控制

git rm --cached <file>

恢复一根文件到之前的版本

git checkout <file> <commit-id>

创建一个新的提交,用来撤销指定的提交,后者的所有变化将被前者抵消,并且应用到当前分支。

git revert <commit-id>

重置当前分支的HEAD为之前的某个提交,并且删除所有之后的提交。

--hard 表示重置工作区和暂存区

--soft 表示保留工作区和暂存区

--mixed 默认参数,表示保留工作区,重置暂存区

git reset --mixed <commit-id>

撤销暂存区的文件,重新放回工作区(git add的反向操作)

git restore --staged <file>

11 查看状态

查看仓库状态

git status

查看记录

git log
git log --oneline

查看未暂存的文件更新了哪些部分(工作区VS暂存区)

git diff

工作区VS本地仓库

git diff HEAD

暂存区VS本地仓库

git diff --cached
git diff --staged

查看两个提交之间的差异

git diff <commit-id> <commit-id>
git diff HEAD~ HEAD

查看两个分支之间的差异

git diff <branch_name> <branch_name>

查看仓库文件

git ls-files

查看历史操作记录

git reflog

12 stash

stash操作可以把当前工作现场储藏起来,等以后恢复现场后继续工作。

-u 表示把所有未跟踪的文件一并存储

-a 把所有未跟踪文件和忽略的文件一并存储

save参数表示存储的信息,可以不写

git stash save "message"

查看所有stash

git stash list

恢复最近的一次stash

git stash pop

恢复指定的stash,stash@{2}表示第三个stash,stash@{0}表示最近的stash

git stash pop stash@{2}

重新接受最近一次stash。pop 和 reply 的区别是,pop会把stash内容删除,apply不会。

git stash apply

删除所有stash

git stash clear

13 远程仓库

添加远程仓库

git remote add <remote-name> <remote-url>

查看远程仓库

git remote -v

删除远程仓库

git remote rm <remote-name>

重命名远程仓库

git remote rename <old-name> <new-name>

从远程仓库拉取代码,默认拉取仓库名origin的master/main分支。

git pull <remote-name> <branch-name>

将本地改动的代码rebase到远程仓库最新代码。

git pull --rebase

推送代码到远程仓库。

git push <remote-name> <branch-name>

获取所有远程分支。

git fetch <remote-name>

查看远程分支。

git branch -r

fetch某一个特定的远程分支。

git fetch <remote-name> <branch-name>

14 GitFlow

GitFlow是一种流程模型。

  • 主分支(master/main):代表了项目的稳定版本,每个提交到主分支的代码都是经过测试和审核的。
  • 开发分支(develop):用于日常开发。所有的功能分支、发布分支和修补分支都应该从开发分支派生出来。
  • 功能分支(featue):用于开发单独的功能或者特性。每个功能分支抖音该从开发分支派生,并在开发完成后合并回开发分支。
  • 发布分支(release):用于准备项目的发布。从开发分支派生,并在准备好发布版本后合并回主分支和开发分支。
  • 热修复分支(hotfix):用于修复主分支上的紧急问题。热修复分支应该从主分支派生,修复完成后,合并回主分支和开发分支。

15 参考

https://geekhour.net/

相关推荐
真就死难3 小时前
Git是什么
git
机械心8 小时前
代码管理git详细使用教程及最佳实践路径
git
hkj88089 小时前
Git 常用命令
git
dawnkylin14 小时前
通过 fork 为项目做出贡献
git·github
1379003401 天前
Git 设置代理
git
xiaodunmeng1 天前
sourcetree gitee 详细使用
git
LostSpeed2 天前
git,gitea - tool - creat Gitea Empty Rep Dir
git·gitea
前端郭德纲2 天前
vscode默认终端怎么设置成git bash
git·vscode·bash
近听水无声4772 天前
git 学习(基于Ubuntu和gitee)
git
2401_826097623 天前
同步&异步日志系统-日志落地模块的实现
c++·git·vim