7

初探Git:理解和使用版本控制的魔法 - StarLikeRain

 8 months ago
source link: https://www.cnblogs.com/StarLikeRain/p/17951299
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

初探Git:理解和使用版本控制的魔法 - StarLikeRain - 博客园

2880877-20240107223948995-856671070.png

 遥远的古代,有一位美丽的仙女叫做嫦娥。她的丈夫后羿获得了令人长生不老的鹿骨露。一天,嫦娥在好奇心的驱使下,独自偷喝了这瓶仙药。 喝下仙药的瞬间,嫦娥发现自己开始飘起,越飘越高,最后飘向了月亮。嫦娥惊慌失措,她突然意识到,自己做了一个错误的决定,她非常后悔,但一切已经无法改变,她只能在月亮上度过寂寞的生活。 如果嫦娥的世界有Git这样的版本控制工具,事情可能会完全不同。她偷喝仙药的决定就像我们在编程时对代码的修改,而她后悔的感觉,就像我们在发布代码后发现了重大的错误。 如果之前喝仙药的决定被记录在Git中,像进行一次commit操作,嫦娥就可以使用`git revert`撤销这个决定,就像撤销一次错误的代码提交。或者她可以使用`git reset --hard`命令,回到偷喝仙药之前的状态,就像我们将代码回滚到之前的某个版本。 重写的故事也许有些荒诞,但它生动地描绘了Git工具的强大之处。在代码的世界里,我们有能力前进也可以后退;我们可以修正错误,也可以尝试新的可能。这种灵活性让我们可以更有信心地进行工作,因为我们知道,即使我们做了错误的决定,也总有机会改正它。这也正是Git所带给我们的,掌控历史进程的能力。下面就让我们一起来学习这个强大的工具吧。

一、Git是什么?
Git 是一个开源的分布式版本控制系统。 在项目开发中,开发人员通过 Git 追踪和协调他们代码的变化,以及将其历史版本记录下来,方便在需要时通过查阅历史版本进行问题的定位和修复。

二、为什么使用Git?

版本控制是软件开发的重要组成部分,对于代码更改的追踪和管理都显得至关重要。
Git不仅可用于版本控制,同时也是优秀的协作工具。当多名开发者同时工作在同一个项目中时,Git能够确保代码的同步并避免代码冲突。
此外,Git的存储效率和性能也非常高,能够快速地处理大量的操作和数据。

三、常用Git命令

接下来,我将一一介绍Git中常用的命令。

1.新建与配置

通过以下命令,可以新建一个Git代码仓库,也能够从网络上下载已有的项目:
  • git init 在当前目录新建一个Git代码库。
  • git clone [url] 下载一个项目及其整个代码历史。
Git的设置存储在.gitconfig文件中,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。以下命令可以用于显示及编辑设置:
  • git config --list 显示当前的Git配置。
  • git config -e [--global] 编辑Git配置文件。

2.增加与删除文件

增加或删除文件是日常工作中不可或缺的一部分,以下命令可帮助你完成这些工作:
  • git add [file1] [file2] ...:用于将指定文件添加到暂存区。你可以一次添加多个文件,只需要在 git add 后面列出文件的名字即可。
  • git add [dir]:此命令用于将指定目录(包括子目录)的所有文件添加到暂存区。
  • git add .:此命令用于添加当前目录的所有文件到暂存区。
  • git rm [file]: 此命令用于删除工作区的文件,并且将这次删除添加到暂存区。
  • git rm --cached [file]:此命令用于删除版本库的文件信息,但保留工作区的文件。这通常用于文件已经被纳入版本控制,但你希望忽略它们。例如,当你不小心将不需要提交的文件(比如包含敏感信息的配置文件)添加到了版本库,你需要移除版本库中的该文件,但在本地保留。这时,你可以使用 git rm --cached [file] 命令,接着在 .gitignore 文件中添加对应要忽略的文件名,防止今后误提交。

3.代码提交

与代码相关的修改,都应通过以下命令提交到Git仓库中:
  • git commit -m [message] 提交暂存区到仓库区。
  • git commit [file1] [file2] ... -m [message] 提交暂存区的指定文件到仓库区。
  • git commit --amend -m [message] 使用新的commit,替代上一次的提交。
  • git commit -a: 自动把所有已经跟踪过的文件的更改(新增、修改、删除)都放到暂存区,然后执行一次 commit。
  • git cherry-pick <commit-hash> 将特定的提交从一个分支应用(或称挑选)到另一个分支,生成新的【hash值不同的】提交。用于想要在不同的分支上修复同一个 bug,或者想要在主分支上迅速应用一个特性分支上的某个提交

4.分支新建与切换

在涉及多个开发人员或者需要同时进行多项任务时,分支是一种非常实用的功能。
  • git branch:这个命令用于查看本地所有的分支。
  • git branch -r:查看远程所有分支。
  • git branch [branch-name]:新建一个分支,但仍停留在当前分支。
  • git checkout -b [branch-name]:新建一个分支,并切换到该分支。
  • git checkout <branch-name> :将当前的工作目录切换成 <branch-name> 分支的代码。
  • git switch <branch-name> :将当前的工作目录切换成 <branch-name> 分支的代码。(checkout 命令和撤销修改相关,容易混淆,建议使用 Switch) 

5.分支合并

  • git merge [branch]:将指定分支合并到当前分支。
  • 无冲突git merge xxx快速合并
  • 有冲突CONFLICT (content): Merge conflict in readme.txtAutomatic merge failed; fix conflicts and then commit the result.
    64e2bdfd470625b31c9807e2_hd.png?e=1704636083008&token=xX63b9jqTlDOcGmctt5K9254rV0LG8hS9BmDeFBy:gKlKMcWfgh09vzdFKg1fDeBhqtc=
    Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,需要修改后提交:
  • $ git add readme.txt
  • $ git commit -m "conflict fixed"
  • 用带参数的git log也可以看到分支的合并情况:$ git log --graph --pretty=oneline --abbrev-commit
  • 当你合并两个分支时,如果一个分支是另一个分支的直接祖先,Git会默认使用 "Fast-forward" 的方式将二者合并,即直接将指针向前移动。但如果它们的历史不完全一样,Git 会进行 "three-way merge",并自动创建一个新的 commit。
  • 64e2be76ca0075d800de210d_hd.png?e=1704636083008&token=xX63b9jqTlDOcGmctt5K9254rV0LG8hS9BmDeFBy:C_L51Hqe1rQu-jwMrjNcI8keBcE=

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK