Git 版本控制,看这篇就够了 (二)基础篇

简介: Git 版本控制,看这篇就够了 (二)基础篇

摘要:完成本系列文章的阅读以后,你将掌握git的基本概念与git的基本命令,可以在本地随心所欲的完成代码的提交撤销保存修改等操作、可以流畅的参与多人协作,让我们快点来学习吧!




上集回顾:


经过上一次的学习,传送门 -->


Git的基本概念


知道了git的作用、历史;


学会安装配置Git,使用Git创建项目托管以及工作区和暂存区的概念


我们这一次是一次孤独的版本控制管理,因为这次只有一个人孤军奋战,等下一次我们就可以体验到多人协作的魅力啦!


本文核心点:


如何在本地提交你的代码(创建、修改、删除文件)


如何优雅的拉代码(拉代码的两种方式pull、fetch)


什么是分支以及分支操作 (创建、切换、删除分支)




01



如何在本地提交你的代码




还记得上次我们学习了工作区、版本库、暂存区的概念,我们使用了淘宝商家、私人管家、私人仓库来举例,这一节我们还是用他们来举例,你在本地随心所欲的写代码,你会创建新的文件、修改历史文件、甚至不满意了就删掉两个文件这些都是可以的,因为你是老大听你的。




你养了一个管家他就是你的本地版本仓库,躲在根目录下面,是名字叫 .git的一个隐藏文件夹,本地的所有直接针对代码文件的操作都是在工作区完成的。




然后我们再用一系列命令给工作区的代码放到暂存区里,再通过一系列命令提交到版本库中去,并且在提交到版本库的过程中可以标记每次提交的代码是新增了什么功能、改了什么bug、删除了哪些文件;非常的直观舒服,请容我细细道来。


新文件与修改

$ ls
README.md
$ touch file1.txt
$ git add file1.txt
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file:   file1.txt
$ git commit -m "[+]add new file1.txt"
[master 66cc488] [+]add new file1.txt
1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1.txt


上图操作包含:


创建新文件file1.txt


add 添加修改的内容到索引


status 查看修改的内容


commit 把索引提交到本地分支


git add . :监控工作区的状态树,此命令会把工作区的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。


git add -u:他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写),我们在写一个的新的功能创建了一些新的代码文件,我们暂时不想提交这些代码,这种情况下就可以考虑此命令


git add -A :是上面两个功能的合集(git add --all的缩写),一般新创建和删除的文件都是要加到暂存区的,所以我们通常直接用这个命令就可以了。

89a0216711666e822730cd66822c22a2.jpg

upload successful



git show 列出最近一次的提交

对于commit:像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。


删除文件

$ ls
README.md file1.txt
$ git rm file1.txt
rm 'file1.txt'
$ ls
README.md
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
  deleted:    file1.txt
$ git commit -m "[-]delete file1.txt"
[master e278392] [-]delete file1.txt
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 file1.txt


上图操作包含:


创建新文件file1.txt


git rm 删除file1.txt文件


status 查看修改的内容


commit 把索引提交到本地分支


tip1: 如果没有用git rm删除文件,在本地删除文件后,git add一下再提交可以达到同样的效果


tip2: 要是你加班太晚,头晕不小心删除了不想删除的文件怎么办?敬请期待以后的推送之后悔药


02



如何优雅的拉代码


方法一 pull

$ git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:pzqu/git_test
   5fd4d8f..7b54a8a  master     -> origin/master
Merge made by the 'recursive' strategy.
 share_file.txt | 1 +
1 file changed, 1 insertion(+)
 create mode 100644 share_file.txt

上图命令:

  • git pull

查看本地仓库变化git log

4f64ea71e12426f7787a93ec892c5514.jpg


upload successful



上图可以看到向远程仓库pull的时候,出现了两个新的commit,commit 7b54a8ae74...的提交信息为Create share_file.txt,另一个commit fdbb19cf4c51770的提交信息为Merge branch 'master' of github.com:pzqu/git_test。事实上主线只有一个提交,为什么会出现这种情况? 是因为pull其实会做两个操作


拉远程仓库代码到本地


自动与当前分支合并并生成一个合并成功的提交


注意这里的第二个个步骤如果远程有人和你改了同一个文件就会出现一个冲突,这个时候git会提示你哪些文件有冲突,手动改了再提交一次就可以了。详情见合并冲突


方法二 fetch


我在远程修改了文件,向share_file.txt加了一行内容tom modify,此时拉代码。


$ git fetch
$ git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: [+]add new file1.txt
Applying: [-]delete file1.txt

上图所示有以下两个操作

fetch 拉取远端代码到本地

rebase 把本地代码提交基于远端分支重新replay

效果如下:


8eb150d7e9e7290603c5f60db2864935.jpg

upload successful



上图是git log所输出的提交内容,刚刚pull的时候忘记把pull自动产生的merge提交到远程,rebase的时候把本地的提交放到了远程提交之后,看起来就是一条直线,比较优雅,也是推荐的方式。


同样的,如果在拉代码的时候,有另一个人也向远程仓库提交了代码,恰好你们的代码都是修改的相同的文件,这就会发生一个冲突,必须要你来亲自决定哪些代码留下哪些代码删掉,详情我们会在以后的文章合并冲突和大家一起分析,这次我们摒弃杂念,只考虑一个人的情况下。


03



什么是分支以及分支操作  


创建分支

分支是多人协同最经典的地方所在,我们来创建一个分支

$ git checkout -b dev/pzqu origin/master
Branch 'dev/pzqu' set up to track remote branch 'master' from 'origin'.
Switched to a new branch 'dev/pzqu'
$ git branch
* dev/pzqu
  master

git checkout -b 分支名 其他分支,-b代表创建并切换到新建的分支,分支名代表新创建的分支叫什么名字,这里叫dev/pzqu ,其他分支代表基于哪一个分支来创建,这里基于远程的master分支origin/master,如果省略则代表基于当前分支


git branch展示本地的分支情况,加-a参数可以展示全部的分支,包括远程分支


*在分支前,指明了现在所在的分支是dev/pzqu


切换分支

$ git checkout -b dev/pzqu2
Switched to a new branch 'dev/pzqu2'
$ git branch
  dev/pzqu
* dev/pzqu2
  master
$ git checkout dev/pzqu
Switched to branch 'dev/pzqu'
Your branch is up to date with 'origin/master'.
$ git branch
* dev/pzqu
  dev/pzqu2
  master


  • 基于当前分支创建了一个新的分支并自动切换过去dev/pzqu2
  • git checkout 已存在的分支名切换分支回到dev/pzqu


删除分支


$ git branch
* dev/pzqu
  dev/pzqu2
  master
$ git branch -D dev/pzqu2
Deleted branch dev/pzqu2 (was 7c9be37).
$ git branch
* dev/pzqu
  master


位于dev/pzqu,删除了dev/pzqu2分支


04



小结


今天的三分钟就到此结束了,通过本次的学习我们学会了

如何本地的工作区与暂存区之间提交你的代码(创建、修改、删除文件)


如何优雅的拉代码(拉代码的两种方式pull、fetch)


什么是分支以及分支操作 (创建、切换、删除分支)

相关文章
|
1月前
|
Linux 开发工具 git
掌握 Git:版本控制的艺术
Git 是由 Linus Torvalds 开发的分布式版本控制系统,广泛用于代码管理和团队协作。其核心价值在于分布式特性、数据完整性和支持非线性开发。本文介绍 Git 的安装、仓库初始化、文件管理、分支管理、远程仓库操作及撤销操作等基础与高级技巧,助你掌握版本控制的艺术。通过实践,你将能更高效地利用 Git 进行代码管理和团队协作。
|
1天前
|
Ubuntu 开发工具 git
Git高手必备:掌握这些版本控制最佳实践,让你的代码管理效率翻倍!
【10月更文挑战第25天】使用 Git 进行版本控制是现代软件开发的重要部分。本文详细介绍了 Git 的安装、配置、基本操作、分支管理、冲突解决及常用命令,帮助开发者提高工作效率,确保代码质量和团队协作的顺利进行。通过合理使用 Git,可以有效管理代码变更,支持多人协作,并追踪历史记录。
13 4
|
1天前
|
开发工具 C# git
C#一分钟浅谈:Git 版本控制与 GitFlow 工作流
【10月更文挑战第22天】本文介绍了 Git 和 GitFlow 的结合使用,从基础概念到具体操作,涵盖了安装配置、基本命令、GitFlow 工作流的核心分支和流程示例。同时,文章还讨论了常见的问题和易错点,如忽略文件、冲突解决、回退提交和分支命名规范,并提供了代码案例。通过学习本文,读者可以更好地理解和应用 Git 及 GitFlow,提高团队协作效率。
8 1
|
22小时前
|
开发工具 git 开发者
|
27天前
|
编译器 开发工具 数据安全/隐私保护
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
本文提供了一个关于如何在Gitee上进行多人协作和版本控制的详细教程,包括新建和初始化仓库、克隆仓库、邀请好友共同管理仓库以及注意事项,旨在帮助用户顺利进行代码协作开发。
82 0
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
|
2月前
|
存储 Linux 开发工具
掌握 Git:版本控制的瑞士军刀
在软件开发中,版本控制对于代码管理和团队协作至关重要。Git 是一款由 Linus Torvalds 开发的分布式版本控制系统,广泛应用于各类项目。本文介绍了 Git 的基本原理、核心概念及常用命令,如初始化仓库 (`git init`)、克隆 (`git clone`)、提交 (`git commit`) 和合并 (`git merge`) 等。此外,还分享了编写清晰提交信息、使用分支开发和定期合并等最佳实践,帮助开发者更高效地使用 Git。
|
2月前
|
测试技术 开发工具 git
掌握 Git 分支策略:提升你的版本控制技能
在现代软件开发中,版本控制至关重要,Git 作为最流行的分布式版本控制系统,其分支管理策略对于高效协作和代码维护尤为重要。本文介绍了几种常用的 Git 分支策略,包括主线开发模型、功能分支模型、Gitflow 工作流和 Forking 工作流,并探讨了如何根据项目需求选择合适的分支模型。通过保持 `master` 分支稳定、及时合并清理分支、使用命名规范、利用 Pull Request 进行代码审查及自动化测试等最佳实践,可以显著提升团队协作效率和软件质量。掌握这些策略将帮助开发者更好地管理代码库,加快开发流程。
|
22天前
|
数据可视化 项目管理 开发工具
Git 可视化的实现:提升版本控制体验的利器
Git是最流行的分布式版本控制系统,广泛用于软件开发和项目管理。但其命令行操作复杂,难以直观理解,尤其是涉及分支和合并时。为此,Git可视化工具应运而生,通过图形界面帮助开发者更清晰地理解项目历史、分支结构及变更情况。本文将探讨Git可视化的概念背景、技术方法及相关工具,包括GitKraken、Sourcetree、Gitg、Git Extensions和Tig等,帮助读者掌握其在日常工作中的应用,提升版本管理效率。此外,还将介绍如何结合可视化项目管理工具,如板栗看板,实现更高效的团队协作和任务管理。
26 0
|
24天前
|
Shell 网络安全 开发工具
使用Git进行版本控制
使用Git进行版本控制
29 0
|
6月前
|
项目管理 开发工具 git
版本控制与源代码管理:在 Visual Basic 项目中使用 Git
【4月更文挑战第27天】本文介绍了在Visual Basic项目中使用Git进行版本控制和源代码管理的重要性。Git作为一个流行的分布式版本控制系统,具备分布式架构、高效性能和强大分支管理等特点。在项目中,需先安装Git,然后初始化仓库、添加文件和提交更改。常用操作包括查看状态、日志、创建及切换分支和合并分支。团队协作时,借助远程仓库和推送拉取命令实现代码共享。虽然Git有学习曲线,但其优势在于强大的功能、灵活性和社区支持,能提升开发效率和代码质量。通过学习和实践,开发者可充分利用Git优化协作和项目管理。
72 1