type
status
date
slug
summary
tags
category
icon
password
comment
这两天详细学习了一下Git,了解它的思想后,觉得挺好用,这里记录一下笔记,以备后续查看。
Git保存了你的每一次修改,修改做的记录,以及版本,只用一个文件保存,所以他不会让你的内存增加,你的工作区的文件保持你修改的最新版本,但是通过git你记录了每次修改,所以你可以很方便的查看你做了哪些修改,并且回到你修改的某个版本。
什么是Git?
什么是 Git?
Git 是一个 分布式版本控制系统。它的作用是帮助开发者管理代码的变化,跟踪和记录每次修改的历史,方便多个开发者协同开发,查看、回溯代码的历史记录,并且在多人协作时避免冲突。
如何理解 Git?
理解 Git,可以从以下几个方面来入手:
1. 版本控制
Git 让你能够管理文件和代码的历史版本。每当你对代码做出修改时,Git 会记录这个变化,你可以随时查看过去的版本,或者将代码回退到某个特定版本。
2. 分布式系统
Git 是 分布式 的,意味着每个人的电脑上都会有整个项目的历史版本。即使你不连接到互联网,Git 也能在本地管理代码的历史记录,直到你与其他开发者进行代码同步(如推送到 GitHub)。
3. 分支与合并
Git 允许开发者在不同的 分支 上工作,独立进行开发和修改。当工作完成后,可以将不同分支的代码合并(merge)。分支使得多人开发时每个人都能独立工作,互不干扰,然后合并时再解决冲突。
4. 高效的协作工具
Git 的另一个核心功能是 协作。通过 Git,多个开发者可以同时对一个项目进行修改,而不会因为覆盖代码或丢失修改而发生问题。它通过 分支 和 合并 实现协作,使用 pull requests (PR) 提交代码,让团队成员可以审查、讨论和反馈代码。
5. 每次操作都记录快照
Git 工作时,每一次 提交(commit) 都是对当前代码的一个 快照。它记录了文件内容的所有变化,并与前一个版本建立关联。这使得你可以随时回溯到过去某个特定的状态。
6. Git 适合跟踪源代码
Git 是专门设计来帮助开发者管理 源代码的版本历史 的,而不仅仅是一个文件管理工具。它非常适合代码这类频繁修改、需要多人协作的场景。
Git 的基本概念
1. 仓库(Repository)
Git 会把一个项目存储在 仓库(Repository) 中。仓库记录了所有文件和版本的历史。仓库可以分为两种类型:
- 本地仓库:存储在你电脑上的 Git 仓库。
- 远程仓库:存储在服务器上的 Git 仓库(如 GitHub、GitLab)。
2. 工作区(Working Directory)
工作区是你实际工作的地方。它是你本地的文件夹,包含了你正在编辑的文件。当你修改文件时,Git 会跟踪这些文件的变化。
3. 暂存区(Staging Area)
当你修改了文件之后,你需要把这些修改 添加到暂存区(使用
git add
命令)。暂存区是一个临时区域,准备把修改提交到仓库。当你提交(git commit
)时,Git 会将暂存区的内容保存为一个新的版本。4. 提交(Commit)
提交是 Git 中的核心概念。每次你完成一些工作,都会通过 提交(commit) 将修改记录到 Git 仓库中。每次提交都有一个唯一的 ID,你可以查看每个提交的内容以及是谁做的。
5. 分支(Branch)
分支是 Git 的一大特性,它允许你在不影响主项目的情况下,创建一个独立的工作空间。你可以在分支上自由地修改代码,直到代码准备好再合并回主分支。分支的使用使得多人开发变得更加灵活和高效。
6. 合并(Merge)
合并是将两个分支的修改整合到一起的过程。如果在不同的分支上进行修改,当需要合并时,Git 会将这些修改结合在一起。如果出现冲突(两个分支修改了相同部分),需要手动解决冲突。
如何使用 Git
- 初始化一个仓库:
- 你可以通过
git init
创建一个新的 Git 仓库,Git 会创建一个.git
的隐藏目录来管理版本控制。
- 查看当前状态:
- 使用
git status
命令查看当前文件的状态,哪些文件已经修改、哪些文件已暂存等。
- 查看历史版本:
- 使用
git log
查看提交历史,了解项目的变化过程。
- 创建和切换分支:
- 使用
git branch
查看当前的分支,使用git checkout -b <branch_name>
创建并切换到新分支。
- 提交修改:
- 使用
git add <file>
将修改的文件加入暂存区,然后使用git commit -m "message"
提交。
- 推送到远程仓库:
- 使用
git push
将本地的提交推送到远程仓库。
- 拉取远程仓库的更新:
- 使用
git pull
从远程仓库获取最新的修改并合并到本地。
- 解决冲突:
- 当两个分支修改了相同部分,Git 会产生冲突,开发者需要手动解决冲突并完成合并。
总结:
Git 是一个 分布式版本控制系统,它使得多个开发者能够在同一个项目上协同工作,跟踪每次修改的历史,避免丢失代码,轻松管理版本。通过 分支 和 合并 等功能,Git 使得开发者能够在不影响主分支的情况下独立进行工作,增加了团队协作的效率。Git 不仅适用于单人开发,也适用于团队协作,是现代软件开发中的重要工具。
希望这样的解释让你对 Git 的概念更加清晰!如果还有疑问,随时告诉我。
Git保存的是你的修改,你的每一次修改都会被保存在.git的文件中
git与github联动参与别人的开源项目流程
流程:
- Fork 别人的 GitHub 仓库:
- 首先,你在 GitHub 上找到一个你想要贡献的开源项目。你点击 Fork 按钮,将该仓库复制到你自己的 GitHub 账户下,这样你就有了自己的 fork 仓库,可以在上面做修改。
- 将 fork 的仓库克隆到本地:
- 然后你把自己 GitHub 上的仓库 克隆(clone) 到本地,准备开始修改代码。
- 你可以在本地做任何修改,这些修改不会影响原始仓库,只会影响你自己的仓库。
- 在本地进行修改并提交:
- 你在本地仓库中修改文件(比如修复 bug、添加新功能等)。
- 修改完成后,使用
git add
和git commit
命令提交本地的修改,然后推送(git push
)到你自己的 GitHub 上。
- 创建 Pull Request(PR)提交给源仓库:
- 当你完成修改并提交到你自己的 GitHub 仓库后,你创建一个 Pull Request(PR),向源仓库的维护者提议将你的修改合并到他们的仓库。
- 源仓库的维护者会审查你的 PR,并决定是否接受你的修改。
- 同步源仓库的更新到你的本地仓库:
- 在你提交 PR 的同时,源仓库(原始仓库)可能也有其他人提交了修改,你需要确保你的仓库是与源仓库同步的。
- 这时,你需要 从源仓库拉取更新(即
git fetch
和git merge
),并将源仓库的更新合并到你的本地仓库中。这样可以确保你本地的代码是基于最新的源仓库版本。
- 继续在本地修改并推送到你的 GitHub 仓库:
- 如果源仓库的更新与本地代码产生了冲突,你需要手动解决这些冲突。
- 解决完冲突后,你可以继续在本地进行修改,提交修改,并推送到你自己的 GitHub 仓库。
- 更新你的 Pull Request(PR):
- 如果你在解决冲突后有了新的修改,或者在源仓库更新后做了新的修改,PR 会自动更新,源仓库的维护者会看到这些更新。
- 等待合并:
- 源仓库的维护者审核你的 PR,如果没问题,他们会把你的修改合并到源仓库。
简化的顺序:
- Fork → 复制源仓库到自己的 GitHub 账户。
- Clone → 从你自己 GitHub 仓库克隆到本地。
- 修改 → 在本地修改代码
- 提交 → 提交修改并推送到 GitHub 仓库。
- PR → 创建 Pull Request,将修改提交给源仓库。
- 同步源仓库更新 → 拉取源仓库的最新代码,合并到你本地。
- 继续修改 → 继续在本地修改并提交到你的Github,保持与源仓库同步。
- 更新 PR → 提交新的修改到 PR。
- 等待合并 → 源仓库的维护者审查并合并你的修改。
结论:
- 你 只需要 fork 一次,然后在本地进行反复修改和提交,提交到你自己的 GitHub 仓库。
- 每次开发前,你可以通过 同步源仓库的更新,保持你的本地仓库和源仓库一致。
- 最后,通过 Pull Request 将你的修改贡献给源仓库,等待维护者的审查和合并。
可以想象你和源仓库之间有一个“双向桥梁”,你本地的仓库和你 GitHub 上的仓库作为桥梁的两端,而源仓库是另一端。你通过桥梁进行本地开发、同步和提交。
你Github账号里的项目搭建起了你本地文件和源仓库的桥梁
Git暂存区的作用
你提出了一个很好的问题!Git 的暂存区(也叫 索引,Index)是 Git 中一个非常重要且有用的概念,它提供了更细粒度的控制,让你可以灵活地管理提交内容。接下来,我会从 工作流 和 控制粒度 两个角度解释为什么 Git 要使用暂存区而不是直接提交。
1. 工作流的需要
Git 的工作流设计得非常灵活,它允许你在多个修改之间进行分阶段的管理。暂存区正是为了满足这种需求而存在的,它为你提供了一个中间的缓冲区,使你能更精确地控制哪些修改会被提交到版本库。
工作流中的步骤:
- 编辑文件:你在工作区(工作目录)编辑文件,可能会做多个修改。
- 添加到暂存区(
git add
):你选择将某些修改“暂存”到暂存区。注意,git add
并不会提交,只是把你修改的内容放入暂存区,准备提交。你可以选择哪些文件或哪些修改加入暂存区,而不需要一次性提交所有修改。
- 提交(
git commit
):当你觉得暂存区的内容准备好了,就使用git commit
提交到版本库。提交时,Git 会把暂存区中的内容作为一个快照保存到版本库。
为什么要通过暂存区?
暂存区的引入是为了让开发者能够分步骤、更细粒度地管理修改:
- 选择性提交:有时候你可能对一个文件做了多个修改,但并不希望一次性提交所有修改。通过暂存区,你可以只提交部分修改,而将其他部分保留在工作区,等以后再提交。
- 更精确的控制:如果你在一个文件中修复了 bug 和添加了新功能,你可以选择只把 bug 修复的部分提交,而暂时不提交新功能部分,等新功能更稳定后再提交。这样可以让每个提交都保持清晰、有意义。
2. 控制粒度
Git 的暂存区可以让你在更细的粒度上控制哪些内容应该被提交,哪些内容应该留待以后提交。你可以控制每次提交的内容,从而使得你的提交历史更加清晰和具有可维护性。
举个例子:
假设你修改了两个文件:
index.html
— 修复了一个界面 bug
app.js
— 实现了一个新功能
如果你直接
git commit
,Git 会把所有文件的修改都提交到版本库,这样就可能导致一个提交同时包含 bug 修复和新功能,这样的提交历史并不清晰。如果以后有人查看这个提交记录,可能不清楚到底是修复了 bug 还是实现了新功能。使用暂存区后,你可以先
git add index.html
只暂存 bug 修复的部分,然后执行 git commit
提交 bug 修复,再 git add app.js
,提交新功能。这样,你的提交历史就会清晰地记录:- 一个专门修复 bug 的提交
- 一个专门实现新功能的提交
通过暂存区,你可以确保每次提交都具有明确的含义,便于将来查看和维护。
3. 暂存区与提交的分离:
直接提交(
git commit
)和暂存(git add
)的分离,让你能够:- 在一个修改的周期中多次添加不同的内容到暂存区,然后一次性提交,这样可以避免在提交时遗漏某些修改。
- 保持 版本历史清晰:避免把不相关的修改混在一起,导致版本历史不易理解。
- 处理 复杂的合并或冲突:当修改了多个文件或多个位置时,暂存区可以让你处理文件的冲突或选择性提交特定部分。
4. Git 还提供了细粒度的操作:
暂存区不仅能让你控制哪些文件被提交,还可以让你控制同一个文件中的部分修改。比如:
- 部分提交:通过
git add -p
(交互式添加)命令,你可以选择性地暂存某个文件中的部分修改,而不是整个文件。
- 撤销暂存:如果你不小心把某些修改添加到了暂存区,你可以使用
git reset HEAD <file>
撤销对某个文件的暂存,重新将其放回工作区。
总结:
为什么 Git 要有暂存区?
- 精细化控制:通过暂存区,你可以选择性地提交修改,不需要一次性提交所有文件的所有更改。
- 清晰的提交历史:暂存区允许你将不同类型的修改(如 bug 修复、新功能)分开提交,使得提交历史更加清晰和可维护。
- 避免错误提交:暂存区让你有机会在提交前检查修改,避免不小心提交了不完整或不相关的内容。
- 更高的灵活性:你可以在修改过程中分多次将内容添加到暂存区,最后一次性提交,避免遗漏。
暂存区看似增加了一步操作,但实际上它让 Git 的工作流更加灵活和精细,帮助你更好地管理版本历史。希望这个解释能帮你理解暂存区的作用!如果还有疑问,随时可以问我。
- 作者:王赞
- 链接:http://blog.wangjiazan.com/article/19da91b5-8f66-8037-b2f8-d2e6ea01b1f4
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。