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)


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

相关文章
|
22天前
|
项目管理 开发工具 git
Python面试题:Git版本控制与协作开发
【4月更文挑战第19天】本文聚焦于Python面试中Git版本控制与协作开发的考察点,涵盖Git基础、协作流程及实战示例。面试者需理解仓库、提交、分支等核心概念,掌握常用命令,熟悉主干开发和GitFlow策略。在协作开发中,要掌握Pull Request工作流,有效处理合并冲突,并善用标签与里程碑。注意避免混淆工作区、忽视代码审查和直接在远程分支上工作等常见错误。通过实例展示了如何在GitFlow策略下合并分支和解决冲突,强调持续学习与实践以提升Git技能。
26 1
|
25天前
|
数据采集 开发工具 git
《Git 简易速速上手小册》第2章:理解版本控制(2024 最新版)
《Git 简易速速上手小册》第2章:理解版本控制(2024 最新版)
30 2
|
1月前
|
开发工具 git 开发者
Git常用命令大全:让你轻松驾驭版本控制
Git命令速查:`git init`新建仓库,`git clone`克隆,`git add`入暂存区,`git commit -m`提交,`git status`查看状态,`git log`查看历史,`git branch`创建分支,`git checkout`切换,`git merge`合并,`git pull`拉取更新,`git push`推送,`git remote -v`查看远程,`git checkout --`撤销本地修改,`git reset HEAD`取消暂存,`git reset --hard`回退版本。掌握这些,提升代码管理效率!
22 0
|
4月前
|
存储 前端开发 开发工具
前端开发中的Git版本控制:构建可靠的协作和代码管理
前端开发中的Git版本控制:构建可靠的协作和代码管理
51 0
|
4月前
|
NoSQL Linux 开发工具
【深入解析git和gdb:版本控制与调试利器的终极指南】(下)
【深入解析git和gdb:版本控制与调试利器的终极指南】
|
开发工具 git
Git版本控制——分支
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着可以把工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
32 0
|
4月前
|
安全 开发工具 git
三分钟学完Git版本控制常用指令
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
30 0
三分钟学完Git版本控制常用指令
|
17天前
|
项目管理 开发工具 git
版本控制与源代码管理:在 Visual Basic 项目中使用 Git
【4月更文挑战第27天】本文介绍了在Visual Basic项目中使用Git进行版本控制和源代码管理的重要性。Git作为一个流行的分布式版本控制系统,具备分布式架构、高效性能和强大分支管理等特点。在项目中,需先安装Git,然后初始化仓库、添加文件和提交更改。常用操作包括查看状态、日志、创建及切换分支和合并分支。团队协作时,借助远程仓库和推送拉取命令实现代码共享。虽然Git有学习曲线,但其优势在于强大的功能、灵活性和社区支持,能提升开发效率和代码质量。通过学习和实践,开发者可充分利用Git优化协作和项目管理。
|
1天前
|
开发工具 git 开发者
Git入门:轻松掌握版本控制的艺术
【5月更文挑战第13天】Git是流行的版本控制系统,适合各种规模的项目。本文引导读者入门Git,学习版本控制艺术。内容涵盖Git简介、安装配置、基础操作(如初始化、添加文件、提交、查看状态和历史)、分支管理、协作开发(克隆、推送、拉取)及高级用法,如标签管理、子模块和版本比较。遵循最佳实践,如频繁提交、有意义的提交信息和合理分支管理,可提升开发效率。
|
14天前
|
前端开发 持续交付 开发工具
【专栏:工具与技巧篇】版本控制与Git在前端开发中的应用
【4月更文挑战第30天】Git是前端开发中的必备工具,它通过分布式版本控制管理代码历史,支持分支、合并、回滚等操作,促进团队协作和冲突解决。在前端项目中,Git用于代码追踪、代码审查、持续集成与部署,提升效率和质量。优化协作包括制定分支策略、编写清晰提交信息、定期合并清理分支及使用Git钩子和自动化工具。掌握Git能有效提升开发效率和代码质量。