Git常用概念与命令

前言

本文作为Git笔记只记录基本的概念与命令,并提供详细学习的链接地址。
作者:ikat
时间:2025-05-16

一、Git简介

详细教程:
Git新手看这个基础教程
https://mp.weixin.qq.com/s/eRzuJpXp-Pwd8-JcJAYycw
Git新手视频教程:
https://www.bilibili.com/video/BV1HM411377j/

有基础的看这些:
GIt命令详细教程
https://blog.csdn.net/u013268445/article/details/143919578
git深入理解(一):暂存区(Stage),索引(index)
https://blog.csdn.net/raoxiaoya/article/details/110824019

图片

1.克隆仓库:在开始工作之前,首先需要将远程仓库克隆到本地机器上。使用git clone命令可以将远程仓库完整地复制到本地。

2.创建分支:为了并行开发和隔离不同的功能或修复,通常会创建新的分支。使用git branch命令可以创建一个新的分支,例如:git branch feature-branch

3.切换分支:使用git checkout命令可以切换到创建的分支,例如:git checkout feature-branch

4.添加和提交更改:在所选分支上进行工作后,可以使用git add命令将更改的文件添加到暂存区,然后使用git commit命令将暂存区的更改提交到本地仓库,

5.推送更改:如果要将本地分支的更改推送到远程仓库,可以使用git push命令,例如:git push origin feature-branch。这将把本地分支的更改推送到远程仓库中对应的分支。

6.合并分支:当分支的工作完成后,可以将其合并到主分支(通常是master分支)或其他目标分支中。使用git merge命令可以执行分支合并,

7.解决冲突:如果在合并分支时发生冲突(即同一文件的不同部分具有不同的更改),需要手动解决冲突。在冲突解决后,再次执行git addgit commit命令以完成合并。

8.拉取更新:在团队协作中,如果其他人推送了更改到远程仓库,可以使用git pull命令拉取更新到本地仓库,以确保与最新代码保持同步

二、常用命令

git一图所用命令:

(1)基本概念

1.Git的四个区域

  • 工作区(working Directory):即为你在电脑里看到的目录
  • 暂存区(Stage/Index):一般存放在.git目录下的index文件,所以暂存区也叫索引。
  • 本地仓库(Repository):工作区有个隐藏目录.git,此外Git的版本库。
  • 远程仓库(Remote):托管在远程服务器上的仓库。

2.Git的三种转态

  • 已修改(modified):修改了文件,但是没有保存到暂存区。
  • 已暂存(stage):把修改后的文件放到暂存区。
  • 已提交(comitted):把暂存的文件提交到本地仓库。

3.常用概念

  • main:默认主分支
  • origin:默认远程仓库
  • HEAD:指向当前分支的指针
  • HEAD^:上一个版本
  • HEAD^4:上4个版本

4.特殊文件

  • .git:Git仓库的元数据和对象数据库
  • .gitignore:忽略文件,不需要提交到仓库的文件
  • .gitattributes:指定文件的属性,比如换行符
  • .gitkeep:使空目录被提交到仓库
  • .gitmodules:记录子模块的信息
  • .gitconfig:记录仓库的配置信息

(2)常用命令

1.添加和提交

#添加一个文件到仓库
git add <file>
#添加所有文件到仓库
git add .

#提交所有暂存区的文件到仓库
git commit -m "message"
#提交所有已修改的文件到仓库
git commit -am "message"

除了目录和文件内容的实际变化,Git还会在每次提交的时候记录其他一些元数据,包括日志消息和做出本次变更的作者。一条完全限定的git commit命令必须提供日志消息和作者。
元数据必须得写上去,不然会提交失败。

2.撤销与回退

移动一个文件到新的位置,影响范围:工作区、暂存区

git mv <file> <new-file>

删除一个文件,影响范围:工作区、暂存区

git rm <file>

只从暂存区中删除一个文件,影响范围:暂存区

git rm --cached <file>

恢复一个文件到之前的版本,影响范围:工作区

git chekout <file> <commit-id>

反做:创建一个新的提交,用来撤销指定的提交,后者的所有变化都被前者抵消,并且应用到当前分支
相当于多出来一个新版本去修改指定版本的内容,适用于精确、自动化撤销特定提交,且需保留历史记录的协作场景。

git revert <commit-id>

回退版本命令

#留下暂存区与工作区,相当于只撤回提交
git reset --soft <commit-id>

#完全回到目标版本干净的样子,工作区暂存区全清空
git reset --hard <commit-id>

#默认参数,留下工作区,不留下暂存区
git reset --mixed <commit-id>

3.藏匿stash

在 Git 中,工作区、暂存区和提交区是三个重要的概念。当开发者对工作区的文件进行修改后,这些修改是未跟踪的。开发者可以使用 git add 命令将这些修改添加到暂存区,并使用 git commit 命令将暂存区的修改提交到本地仓库。但是,如果开发者想要保存这些修改而不立即提交,git stash 命令就派上了用场。

存储未提交的更改

git stash
# 或者使用更详细的保存方式
git stash push -m "描述信息"

这会:

  • 保存工作区和暂存区的所有修改
  • 将你的仓库恢复到上一次提交时的状态(干净状态)
  • 创建一个新的 stash 条目(编号从 0 开始)

列出所有 stash

git stash list

输出类似:
stash@{0}: On master: 描述信息stash@{1}: WIP on feature-branch: 1a2b3c4d 上次提交信息

恢复 stash:

#恢复最近一次的 stash 并删除 stash 记录
git stash pop

#恢复特定 stash 但不删除记录
git stash apply stash@{n}  # n 是 stash 编号

#恢复特定 stash 并删除记录
git stash pop stash@{n}

创建分支并应用 stash

git stash branch 新分支名 stash@{n}
这会基于 stash 创建时所在的提交创建新分支,并自动应用该 stash 的更改。

删除 stash

#删除特定 stash
git stash drop stash@{n}

#删除所有 stash
git stash clear

4.分支

查看所有本地分支,当前分支前面会有个*-r查看远程分支,-a查看所有分支

git branch

创建一个新分支

git branch <branch-name>
  1. 新分支的工作区继承自当前分支的节点(即创建时的 HEAD 提交)。

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

git checkout -b <branch-name>

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

git switch <branch-name>
git checkout <branch-name>

问题,工作区会怎样改变?

  1. 更新工作区和暂存区
    • 工作区和暂存区的内容会被替换为目标分支的最新提交状态
    • 如果当前工作区/暂存区有未提交的修改(与目标分支无冲突),Git 会保留这些修改(但可能会提示 your local changes would be overwritten)。
    • 如果有冲突(目标分支的文件与当前修改冲突),Git 会阻止切换,需先提交或暂存(git stash)。

删除分支
-d即为delete只删除已合并的分支
-D为强制删除,无论是否合并

git branch -d <branch-name>
git branch -D <branch-name>

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

git tag <tag-name>

5.合并分支

1)merge合并

当前所在分支为合并后的目标分支,branch-name为被合并的分支

git merge <branch-name>

若发现文件冲突,用一下命令查看

git status
git diff

修改冲突后进行提交,提交后自动完成合并

git add .
#进行提交,提交后自动完成合并
git commit -m "merge conflict"

#终止合并
git merge --abort 
2)Rebase变基

具体功能:找到祖先节点将当前从祖先节点后的分支嫁接到被合并的分支上面。

git rebase <branch-name>

优缺点:
merge优点:不会破坏原分支的提交历史,方便回溯查看。
merge缺点:会产生额外的提交节点,分支图复杂。

Rebase优点:不会新增额外的提交记录,形成线性历史,比较直观和干净。
Rebase缺点:会改变提交历史,改变了当前分支branchout的节点避免在共享分支使用

6.远程仓库

添加远程仓库

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

查看远程仓库

git remote -v

删除远程仓库

git remote rm <remote-name>

重命名远程仓库

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

从远程仓库拉取代码

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

fetch默认远程仓库(origin)当前分支的代码,然后合并到本地分支

git pull

将本地改动的代码Rebase到远程仓库最新的代码上(为了有一个干净的、线性的提交历史)

git pull --rebase

推送代码到远程仓库(然后再发起pull request)

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

获取所有远程分支

git fetch <remote-name>

查看远程分支

git branch -r

fetch某一个特定的远程分支

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

7.查看命令

#查看暂存区文件
git ls-files

#查看所有提交记录
git reflog

#查看提交记录
git log

#文件状态
git status

#查看分支列表
git branch 

#查看分支图
git log --graph --online --decorate --all

#可以用以下命令简化查看分支图,后续只用输入graph即可
alias graph="git log --graph --online --decorate --all"

提问:

1.如果我add了一个文件,如何删除它?
git rm --cached file

2.在一个开发分支/版本下,我add了目录下的所有文件,然后切换到另个分支准备修改bug,修改成功过后add并commit了,然后再返回到刚才的开发分支,刚才add了的文件还在吗?这个问题也可以理解为:暂存区是不是与版本绑定的?
答:暂存区不绑定分支,但切换分支时可能因冲突被部分清空。若文件在分支间无冲突,暂存区则会保留;否则Git会强制丢弃冲突部分。
应该的做法:在切换分支时,进行commit 或者 stash

三、Git之GitFlow工作流

1.Git Flow

Git之GitFlow工作流 | Gitflow Workflow(万字整理,已是最详)
https://blog.csdn.net/sunyctf/article/details/130587970

2.更简洁工作流模型Github Flow:

GitHub Flow 工作流程、知识要点:
https://blog.csdn.net/i6101206007/article/details/108048267

四、Git实践

(1)新远程仓库的关联同步与拉取

1. 首先打开 git bash

2. 在GitHub上创建远程仓库

3. 初始化本地仓库 

   git init

4. 添加远程仓库

   git remote add origin git@github.com:qinikat/CqoocACC.git

5. 验证仓库是否关联成功

   git remote -v

   输出:

   origin  [git@github.com](mailto:git@github.com):qinikat/CqoocACC.git (fetch) origin  [git@github.com](mailto:git@github.com):qinikat/CqoocACC.git (push)

6. 创建本地仓库master

   git checkout -b master

7. 拉取远程仓库数据并合并到当前分支

   git pull origin master

8. 添加本地文件到暂存区

   git add .

9. 开始提交

   git commit -m "Add cqooc_auto.js"

10. 推送到远程仓库

	git push origin master

 git status

五、Git遇到的问题

(1)文件名过长

问题现象:

问题原因:文件名过长,导致无法将某些文件添加到 Git 中。在 Windows 环境下,Git 默认会受到文件路径长度限制,这个限制通常为 260 个字符,这会导致你无法添加某些路径很长的文件。

解决方案:

git config --global core.longpaths true

这样即可解决。

六、git其他工具

可视化工具:
gitkraken
小乌龟
SourceTree

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值