环境配置
用户名配置:
git config --global user.name "你的用户名"
邮箱配置:
git config --global user.email "你的邮箱"
创建本地仓库,初始化后自动设置为master
mkdir test
cd test
git init
ls -la //查看所有目录,包括隐藏目录
新建文件,添加到本地仓库
add:将文件添加到缓存区
commit:提交到本地仓库
创建文件:
touch test.c
使用git指令添加到仓库的提交缓存:
git add test.c
提交本地仓库:
git commit -m "描述信息"
改写上一次提交信息,如果上一次提交信息写错了:
git commit --amend //执行命令后会进入Vim编辑器界面
在界面中按下“i”即可进入编辑界面。修改完后 先按 ESC键 ,然后“:wq”退出并保存。如果不保存直接退出":q!"。
查看提交日志(可能用于回滚)
git log //查看提交日志
commit 33e08ca613fbc8f6133af5a30e6b51f498d88ed1 (HEAD -> master)
:commit
后面跟着的一串字符是这次提交的唯一标识符,即提交哈希(SHA-1)。这个哈希值是由 Git 使用哈希算法生成的,用于唯一标识一次提交。HEAD -> master
表示当前的HEAD
指针指向master
分支,也就是说这次提交是发生在master
分支上的。
Author: simon_4544 <454474181@qq.com>
:- 显示了提交的作者信息,包括用户名和提交时使用的电子邮件地址。
Date: Mon Oct 28 21:15:55 2024 +0800
:- 显示了提交的日期和时间。这里的日期时间格式是“星期 日期 月份 时:分:秒 年份 时区偏移量”。
+0800
表示的是相对于协调世界时(UTC)的时区偏移量,这里是东八区,即北京时间。
回滚代码仓库:git reset --hard “你要回滚的id”
reset参数是重置命令
–hard是重置代码仓库版本
有三种模式
–soft 、–mixed以及–hard是三个恢复等级。
使用–soft就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。
如果使用–mixed,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。
如果使用–hard,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。
git log
git reset --hard 要回滚id
git reset --hard HEAD^
git reset --hard HEAD~3
HEAD^ 表示当前 HEAD 的父提交,即当前分支的上一个版本。
git reset --hard HEAD^ 命令将当前分支回滚到上一个提交,即撤销最后一次提交的所有更改。
使用场景:
当你发现最新的提交有错误或者想要撤销最后一次提交时。
这个命令会将工作目录和暂存区都回滚到上一个版本,所有自上次提交以来的更改都会丢失。
HEAD~3 表示从当前 HEAD 开始,回溯3个版本的提交。
git reset --hard HEAD~3 命令将当前分支回滚到前三个版本的提交。
查看提交之后文件是否做了改动:git status
status:查看当前仓库状态。我们在提交完成之后,有时候可能自己不小心改动了某个文件,或者别人,我们可以使用git status查看文件是否被改动。
保存退出,然后使用git status查看。
可以看到报出了修改,这里我的环境语言是中文,如果是英文则对应的修改是AM,A是未修改
如果你添加了新文件,git status一样会报出来。
英文对应:
A:未修改
AM:修改
Untracked:未提交
modified:新文件,但未提交
工作区与缓存区
在git下有一个概念是缓存区,这是其它集中式版本控制系统没有的
工作区:工作区就是你当前的工作目录
缓存区:这里存放了你使用git add命令提交的文件描述信息,它位于.git目录下的index文件中
修改缓存区内容:git add、git commit -m
比如我们使用git add添加了一个名为min.c的文件,但是还没有提交的时候我们修改了它的内容,修改完成之后在提交会发现内容并不是我们第二次修改的内容
这就要说一点,当我们使用git add添加到缓存区的内容后,我们在修改这个文件时,它跟缓冲区内容是没有任何关系的!我们使用git commit提交的时,它只会提交缓存区内容
如果想提交第二次修改,我们只需要在git add一次,然后在使用git commit提交就可以了,git会自动帮我们合并提交。
将所有改动文件添加到缓存区:git add --all、git add .
git add --all
会记录所有改动,包括删除的文件。
git add .
只会记录新建和修改的文件,不会影响删除的文件。
提交时使用 git commit
确保更改反映到版本库中。
将文件撤销回到最近一次修改的状态:git checkout – file
git checkout -- <file>
是用来恢复文件到上一次提交状态的命令。
使用该命令会丢失所有自上次提交后的更改。
只能恢复到最近一次提交状态,无法恢复未提交的更改。
注意这个功能不能一直迭代恢复,如你恢复到了修改前的版本,你想再次回滚回滚到修改前在之前的版本是不行的。
查看单个文件可回滚版本:git log filename
使用 git log <filename>
查看文件的所有历史版本。
通过 git reset <commit_hash> <filename>
将文件回退到指定版本。
提交后,新的历史版本只包含您更新的文件,其他文件的状态保持不变。
删除文件:git rm
rm <filename>
git rm <filename>
使用 rm 删除文件:需要手动 git add 更新状态,然后提交。
使用 git rm 删除文件:自动记录删除操作,无需额外的 git add。
提交后,文件将从版本控制中删除,并且历史记录中会保留该文件的所有版本。
删除文件会影响工作区吗?
是的,使用 rm 或 git rm 都会在当前工作区删除文件。使用 git rm 还会在 Git 的暂存区中记录删除操作,以便在下一次提交时反映在版本控制中。
查看提交历史:git reflog
git reflog可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括你回滚版本都会出现在这个历史中
git基本组成框架:Workspace、Index / Stage、Repository、Remote
Workspace:开发者工作区
Index / Stage:暂存区/缓存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
Workspace:开发者工作区,也就是你当前写代码的目录,它一般保持的是最新仓库代码。
Index / Stage:缓存区,最早叫Stage,现在新版本已经改成index,位于.git目录中,它用来存放临时动作,比如我们做了git add或者git rm,都是把文件提交到缓存区,这是可以撤销的,然后在通过git commit将缓存区的内容提交到本地仓库
Repository:仓库区,是仓库代码,你所有的提交都在这里,git会保存好每一个历史版本,存放在仓库区,它可以是服务端的也可以是本地的,因为在分布式中,任何人都可以是主仓库。
Remote:远程仓库,只能是别的电脑上的仓库,即服务器仓库。
git rm后恢复文件:git rm、git reset、git checkout
git rm <filename>
删除文件并记录到缓存区,使用 git reset
可以撤销该操作。
使用 git checkout <filename>
可以恢复未提交的文件。
如果文件已经提交,可以通过保存当前修改、查看历史版本、回滚并复制文件的方式进行恢复。
git创建分支:git branch、git checkout
使用git checkout -b参数来创建一个分支,创建完成分支后会自动切换过去
git checkout -b dev
然后我们在使用branch来查看当前属于哪个分支,也就是查看HEAD的指向
git branch
git checkout -b
等价于
git branch dev
git checkout dev
git checkout -b <branch_name>
:创建并切换到新分支。
git branch
:查看所有本地分支及当前分支。
git branch <branch_name>
:仅创建分支而不切换。
git checkout <branch_name>
:切换到已存在的分支。
git切换分支:git checkout
git checkout的作用是检出,如果是文件的话,会放弃对文件的缓存区操作,但是要使用reset重置一下变更才行。
如果是分支的话会切换过去。
使用 git checkout <branch_name>
切换到指定的分支。
使用 git checkout <file>
恢复文件到最后一次提交状态,放弃未提交的更改。
可选择使用 git reset <file>
重置文件的缓存区状态,以确保切换分支前的干净工作区
git合并分支:git merge
当我们新建分支并做完工作之后,想要把分支提交至master,只需要切换到master仓库,并执行git merge 分支名就可以了
git查看分支:git branch -a
如果要查看当前所有分支可以使用:git branch -a
HEAD指向当前分支
git删除本地分支:git branch -D
git branch -D 分支名
git删除远程分支:git push origin --delete
注意这里的远程分支名不需要加origin,输入分支名就可以了
git push origin --delete <远程分支名>
拉取远程分支并创建本地分支的操作步骤
- 查看远程分支:
- 首先,查看远程仓库中的所有分支,确保您知道要拉取的分支名。
git branch -r
- 拉取远程分支:
- 假设您要从远程仓库的
feature_branch
分支创建本地分支。可以使用以下命令:
git fetch origin git checkout -b feature_branch origin/feature_branch
- 说明:
git fetch origin
会从远程仓库获取最新的更新。git checkout -b feature_branch origin/feature_branch
创建并切换到一个新的本地分支feature_branch
,该分支将跟踪远程的origin/feature_branch
。
- 假设您要从远程仓库的
- 在新分支上进行开发:
- 在
feature_branch
分支上进行代码修改,完成开发工作。
- 在
- 添加和提交更改:
git add . git commit -m "Your commit message describing the changes"
- 推送本地分支到远程仓库:
- 完成开发后,可以将新分支推送到远程:
git push -u origin feature_branch
- 说明:
-u
参数将设置本地分支与远程分支的追踪关系,之后可以直接使用git push
和git pull
。