实习技能记录【3】-----Git操作

1. Git是什么

Git 是一个分布式版本控制系统 (Distributed Version Control System, DVCS)。 它的核心目标是跟踪文件的变化,让你能够随时记录、回溯、协作和管理你的项目。

2. 介绍

2.1 Git 工作区、暂存区、本地仓库介绍

区域名称 英文名 说明 相关命令
工作区 Working Directory 你当前编辑的目录,包含所有可见的项目文件 git status, git checkout
暂存区 Staging Area / Index 暂时保存你准备提交的文件修改(git add 后进入) git add, git reset
本地仓库 Local Repository 提交后的版本快照,存储于 .git 目录中 git commit, git log
远程仓库(可选) Remote Repository GitHub、Gitee 等远程平台上的仓库,用于多人协作 git push, git pull

2.2 文件生命周期(状态流转)

编辑文件 → git add → git commit → git push
工作区     暂存区       本地仓库      远程仓库

2.3 状态变更图示(简单流程)

[工作区] --git add--> [暂存区] --git commit--> [本地仓库] --git push--> [远程仓库]
   ↑                               ↓                              ↑
  修改                         git reset HEAD file             git pull
   ↑                                                           ↓
恢复(checkout)                                               拉取更新

3. 操作

指令 说明 示例
git status 查看当前工作区和暂存区状态 git status
git add 将文件加入暂存区,准备提交 git add main.c
git add . 添加当前目录下所有更改文件到暂存区 git add .
git diff 查看工作区和暂存区之间的差异(未暂存的修改) git diff
git diff --cached 查看暂存区和最后一次 commit 的差异(已暂存未提交) git diff --cached
git commit -m "msg" 提交暂存区内容到本地仓库,并附带提交说明 git commit -m "fix bugs"
git log 查看提交历史记录 git log
git reset HEAD 从暂存区移除文件(但保留工作区更改) git reset HEAD main.c
git checkout -- 撤销工作区修改,恢复成最后一次 commit 的内容 git checkout -- main.c
git reset --soft HEAD~1 撤销最近一次 commit,保留更改在暂存区 git reset --soft HEAD~1
git reset --mixed HEAD~1 撤销最近一次 commit,保留更改在工作区(默认方式) git reset --mixed HEAD~1
git reset --hard HEAD~1 撤销最近一次 commit,且清除所有更改(慎用!) git reset --hard HEAD~1
git log --oneline 简洁查看提交历史(每条一行) git log --oneline
git reflog 查看 HEAD 引用日志,找回丢失的提交 git reflog
git stash 暂存当前所有修改(保存工作进度) git stash
git stash pop 恢复最近一次 stash 并删除 git stash pop
git stash apply 应用最近一次 stash(不删除)
git rm 删除工作区和暂存区的文件 git rm file

4. 忽略文件

.gitignore
以下文件需要被忽略:

  • 系统或者软件自动生成的文件
  • 编译产生的中间文件和结果文件
  • 运行时生成日志文件、缓存文件、临时文件
    涉及身份、密码、口令、秘钥等敏感文件

匹配规则:

按行从上到下匹配
# 代表注释
* 匹配多个字符
? 匹配单个字符
[ ]表示匹配列表中的单个字符,
	比如:[abc] 表示a/b/c
** 表示匹配任意的中间目录中括号可以使用短中线连接,
		比如:[0-9]表示任意一位数字,[a-z]表示任意一位小写字
! 表示取反

示例

忽略所有的 .a 文件
但跟踪所有的 lib.a,即便你在前面忽略了.a 文件
!lib.a
只忽略当前目录下的TOD0 文件,而不忽略subdir/ToD0
/TOD0
# 忽略任何目录下名为 build 的文件夹
build/
忽略 doc/notes.txt,”但不忽略 doc/server/arch.txt
doc/*.txt
忽略 doc/目录及其所有子目录下的·pdf 文件
doc/**/*.pdf

注意,github官网有不同语言的gitignore模板,可以直接使用

5. SSH配置

远程仓库和本地仓库同步的方式
https已不再使用
推荐使用ssh
ssh公钥和密钥的关系:

+-----------------+      +-----------------+
|     你的电脑     |----->|     远程服务器   |
| (拥有私钥)      |      | (拥有公钥)      |
+-----------------+      +-----------------+

配置密钥流程
Windows:

1.ssh-keygen -t rsa -b 4096 -c "邮箱"
生成的密钥一般在:
	C:\Users\<你的用户名>\.ssh\
2.然后将rsa.pub内的内容添加到github上
3.测试
	命令行输入:ssh -T [email protected]
4.若通过则可以直接使用git clone ssh地址
5.不通过需要看下方提示

Linux:

cd .ssh
ssh-keygen -t rsa -b 4096

若无法连接,可以尝试:
~/.ssh/下创建config文件
添加内容:

# github
Host github.com
HostName ssh.github.com
Port 443

6. 远程仓库和本地仓库关联

1.关联本地仓库和远程仓库
	git remote add origin <远程仓库的 URL>
	1.1 查看本地关联的仓库
		git remote -v
2.推送本地仓库
	git push -u 远程仓库别名 本地分支:远程分支
3.拉取远程仓库
	自动合并
	git pull
	手动合并
	git fetch

7. 分支

Git 的分支(branch)功能允许你在版本库中创建多个开发线索,使你可以在不影响主线(如 main )的情况下开发新功能、修复 bug 等。

✅ 主要用途

  • 并行开发不同功能
  • 实验新特性
  • 快速 bug 修复
  • 提高协作效率

️ 常用 Git Branch 操作

1.创建新分支
	git branch 分支名
2.切换分支
	git checkout 分支名
	# 或 Git 2.23+ 版本
	git switch 分支名
3.查看分支列表
	git branch
4.合并分支
	git switch 分支名
5.删除分支
	git branch -d 分支名 (已合并)
	git branch -D 分支名 (未合并)

8. 解决分支冲突

想象一下你和你的团队成员正在同一个 Git 仓库并行开发不同的功能或修复不同的 bug。每个人都在自己的分支上工作,这样可以保持主线代码的稳定,并且让不同的开发任务相互隔离。
当以下两种情况同时发生时,就可能产生分支冲突:

  • 不同的分支修改了同一文件的相同部分。 这意味着你和你的同事可能在同一文件的同一行或相邻的几行代码上做了不同的更改。
  • 其中一个分支的更改被合并(git merge)或变基(git rebase)到另一个分支时。 Git 在尝试自动合并这些不同的修改时,发现无法确定最终应该保留哪个版本

简单来说,分支冲突就是 Git 在合并或变基分支时,遇到对同一文件相同部分的冲突修改,不知道应该采纳哪个版本而需要人为介入解决的情况

情景

  1. master分支修改了main1.txt 第一行
  2. dev分支修改了main1.txt 第一行
  3. master commit 修改
  4. dev commit 修改
  5. master merge dev
  6. 冲突产生,需要手动修改和保留,合并冲突内容
  7. 添加暂存区
  8. 提交修改

若不想继续合并,执行git merge --abort终止合并过程

回退和rebase(变基操作)

你可能感兴趣的:(git,分布式版本控制)