2024年Go最新Git教程(持续更新中)_remote counting object 100%,Golang程序员面试笔试宝典

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

命令安装

sudo apt-get install git

源码安装

1.下载源码 解压
2./config
make
sudo make install


**windows**  
 就不介绍了,直接从官网下载安装包,然后安装就可以了。<https://git-scm.com/>


### 快速创建版本库



创建一个目录

mkdir gitTest

初始化仓库

git init

把文件添加到仓库

git add . # . 代表所有新增文件/也可以指定文件

把文件提交到仓库

git commit -m “commit file” # 提交 -m 注释(就是你本次提交干了点啥)

一般提交成功后会有提示

1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)

推送

git push


## Git基础


### 版本回退


在Git使用`git log`查看你历史的提交记录,如下



$ git log
commit eeddb9437332cc49709ecf04d25b9860bcecf587 (HEAD -> moyu_job_collect_analyse, origin/moyu_job_collect_analyse)
Author: ccssk 417506868@qq.com
Date: Thu Feb 4 03:16:16 2021 +0800

simpleui配置 job app创建

commit 5a784abb8796e89bf283e27f70d961b139683c5a (origin/20210203_common_settings, 20210203_common_settings)
Author: ccssk 417506868@qq.com
Date: Wed Feb 3 14:02:27 2021 +0800

公共配置

这一对乱七八糟的东西,你看了之后可能会觉得眼花缭乱,可以加上`--prettty=oneline`



$ git log --pretty=oneline
eeddb9437332cc49709ecf04d25b9860bcecf587 (HEAD -> moyu_job_collect_analyse, origin/moyu_job_collect_analyse) simpleu配置 job app创建
5a784abb8796e89bf283e27f70d961b139683c5a (origin/20210203_common_settings, 20210203_common_settings) 公共配置


这样就清晰多了,前面那一长串字符,就是`版本号(commit id)`,我们经常会在一些可视化的工具中看到提交历史的`时间线`。  
 在git中,`HEAD`表示当前的版本,上一个版本就是`HEAD^`,上上个版本就是`HEAD^^`  
 如果你想回退到上一个版本就是使用`git reset`



git reset --hard HEAD^


其实我们可以直接使用`版本号`,回退到自己想要的版本



git reset --hard 5a784abb #版本号只需要前几位就可以


如果你要是后悔了,那咋办呢?在git中可以使用`git reflog`查看每一次命令



git reflog # 查看命令历史


### 工作区和暂存区


* 工作区:在电脑里可以看到的目录
* 暂存区:英文叫 stage 或 index。一般存放在·`.git` 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
* 版本库:工作区有一个隐藏目录`.git`,这个不算工作区,而是git的版本库


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021020410475599.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NTgxOTYx,size_16,color_FFFFFF,t_70)


### 撤销修改


**取消暂存的文件**  
 `暂存就是讲修改或者添加的文件 git add`  
 例如,你已经修改了两个文件并且想要将它们作为两次独立的修改提交, 但是却意外地输入 git add \* 暂存了它们两个。如何只取消暂存两个中的一个呢? git status 命令提示了你:



git add *
git status
On branch master
Changes to be committed:
(use “git reset HEAD …” to unstage)

renamed:    README.md -> README
modified:   CONTRIBUTING.md

在`“Changes to be committed”`文字正下方,提示使用 `git reset HEAD <file>...`来取消暂存。 所以,我们可以这样来取消暂存 `CONTRIBUTING.md` 文件:



$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use “git reset HEAD …” to unstage)

renamed:    README.md -> README

Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)

modified:   CONTRIBUTING.md


> 
> git reset 确实是个危险的命令,如果加上了 --hard 选项则更是如此。 然而在上述场景中,工作目录中的文件尚未修改,因此相对安全一些。`reset`详细介绍:[https://www.git-scm.com/book/zh/v2/Git-工具-重置揭密#\_git\_reset]( )
> 
> 
> 


**撤销对文件的修改**  
 如果你并不想保留对 CONTRIBUTING.md 文件的修改怎么办? 你该如何方便地撤消修改——将它还原成上次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)? 幸运的是,git status 也告诉了你应该如何做。 在最后一个例子中,未暂存区域是这样:



Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)

modified:   CONTRIBUTING.md

它非常清楚地告诉了你如何撤消之前所做的修改。 让我们来按照提示执行:



$ git checkout – CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use “git reset HEAD …” to unstage)

renamed:    README.md -> README


> 
> 请务必记得`git checkout -- <file>`是一个危险的命令。 你对那个文件在本地的任何修改都会消失——Git 会用最近提交的版本覆盖掉它。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。
> 
> 
> 


`记住,在 Git 中任何 已提交 的东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用 --amend 选项覆盖的提交也可以恢复 (阅读 数据恢复 了解数据恢复)。 然而,任何你未提交的东西丢失后很可能再也找不到了。`  
 [https://www.git-scm.com/book/zh/v2/Git-内部原理-维护与数据恢复#\_data\_recovery]( )


### 删除文件


一般的,如果我们要是删除一个文件,可以在文件管理中直接删除或者使用`rm`命令删除



rm test.txt


这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:



$ git status
On branch master
Changes not staged for commit:
(use “git add/rm …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)

deleted:    test.txt

no changes added to commit (use “git add” and/or “git commit -a”)


现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:



$ git rm test.txt
rm ‘test.txt’

$ git commit -m “remove test.txt”
[master d46f35e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt


另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:



$ git checkout – test.txt


`命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。`


## 远程仓库


为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。 在本节中,我们将介绍一部分远程管理的技能。



> 
> 你完全可以在一个“远程”仓库上工作,而实际上它在你本地的主机上。 词语“远程”未必表示仓库在网络或互联网上的其它位置,而只是表示它在别处。 在这样的远程仓库上工作,仍然需要和其它远程仓库上一样的标准推送、拉取和抓取操作。
> 
> 
> 


**查看远程仓库**  
 如果想查看你已经配置的远程仓库服务器,可以运行 `git remote`命令。 它会列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin ——这是 Git 给你克隆的仓库服务器的默认名字:



$ git remote
origin


你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。



$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)


**添加远程仓库**  
 我们在之前的章节中已经提到并展示了 `git clone`命令是如何自行添加远程仓库的, 不过这里将告诉你如何自己来添加它。 运行 `git remote add <shortname> <url>`添加一个新的远程 Git 仓库,同时指定一个方便使用的简写:



$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)


现在你可以在命令行中使用字符串`pb` 来代替整个`URL`。 例如,如果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 `git fetch pb`:



$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit

  • [new branch] master -> pb/master
  • [new branch] ticgit -> pb/ticgit

现在 Paul 的 master 分支可以在本地通过 pb/master 访问到——你可以将它合并到自己的某个分支中, 或者如果你想要查看它的话,可以检出一个指向该点的本地分支。 (我们将会在 Git 分支 中详细介绍什么是分支以及如何使用分支。)


**从远程仓库中抓取与拉取**



$ git fetch


这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。


如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,`git fetch origin`会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 `git fetch` 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。


如果你的当前分支设置了跟踪远程分支(阅读下一节和 Git 分支 了解更多信息), 那么可以用`git pull`命令来自动抓取后合并该远程分支到当前分支。 这或许是个更加简单舒服的工作流程。默认情况下,git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或其它名字的默认分支)。 运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。


**推送到远程仓库**



$ git push origin master


只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先抓取他们的工作并将其合并进你的工作后才能推送。


**查看某个远程仓库**  
 如果想要查看某一个远程仓库的更多信息,可以使用 git remote show 命令。 如果想以一个特定的缩写名运行这个命令,例如 origin,会得到像下面类似的信息:



$ git remote show origin

  • remote origin
    Fetch URL: https://github.com/schacon/ticgit
    Push URL: https://github.com/schacon/ticgit
    HEAD branch: master
    Remote branches:
    master tracked
    dev-branch tracked
    Local branch configured for ‘git pull’:
    master merges with remote master
    Local ref configured for ‘git push’:
    master pushes to master (up to date)

**远程仓库的重命名与移除**  
 你可以运行 git remote rename 来修改一个远程仓库的简写名。 例如,想要将 pb 重命名为 paul,可以用 git remote rename 这样做:



$ git remote rename pb paul
$ git remote
origin
paul


值得注意的是这同样也会修改你所有远程跟踪的分支名字。 那些过去引用 pb/master 的现在会引用 paul/master。  
 如果因为一些原因想要移除一个远程仓库——你已经从服务器上搬走了或不再想使用某一个特定的镜像了, 又或者某一个贡献者不再贡献了——可以使用`git remote remove 或 git remote rm`:



$ git remote remove paul
$ git remote
origin


## 分支管理


### 实际开发中一套分支管理流程



> 
> `分支的新建与合并`  
>  让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤:
> 
> 
> * 开发某个网站。
> * 为实现某个新的用户需求,创建一个分支。
> * 在这个分支上开展工作。  
>  正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理:
> * 切换到你的线上分支(production branch)。
> * 为这个紧急任务新建一个分支,并在其中修复它。
> * 在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。
> * 切换回你最初工作的分支上,继续工作。
> 
> 
> 


**新建分支**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210207163838371.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NTgxOTYx,size_16,color_FFFFFF,t_70)


现在,你已经决定要解决你的公司使用的问题追踪系统中的`#53`问题。 想要新建一个分支并同时切换到那个分支上,你可以运行一个带有`-b`参数的 `git checkout`命令:



git checkout -b iss53
Switched to a new branch “iss53”

上面这条命令等同于下面的两条命令
git branch iss53
git checkout iss53


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210207163904526.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NTgxOTYx,size_16,color_FFFFFF,t_70)


创建一个新的分支`iss53`,在这个分支上进行开发,突然线上环境又有一个紧急的缺陷需要你解决。有了 Git 的帮助,你不必把这个`紧急问题`和 `iss53`的修改混在一起, 你也不需要花大力气来还原关于`53#`问题的修改,然后再添加关于这个紧急问题的修改,最后将这个修改提交到线上分支。 你所要做的仅仅是切换回 `master` 分支。



$ vim index.html
$ git commit -a -m ‘added a new footer [issue 53]’


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210207164136502.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NTgxOTYx,size_16,color_FFFFFF,t_70)


**分支切换**  
 但是,在你这么做之前,要留意你的工作目录和暂存区里那些还没有被提交的修改, 它可能会和你即将检出的分支产生冲突从而阻止 Git 切换到该分支。 最好的方法是,在你切换分支之前,保持好一个干净的状态。 有一些方法可以绕过这个问题(即,暂存(stashing) 和 修补提交(commit amending)), 我们会在 [贮藏与清理]( )中看到关于这两个命令的介绍。 现在,我们假设你已经把你的修改全部提交了,这时你可以切换回 master 分支了:



$ git checkout master
Switched to branch ‘master’


这个时候,你的工作目录和你在开始`#53` 问题之前一模一样,现在你可以专心修复紧急问题了。 请牢记:当你切换分支的时候,`Git` 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。 Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样。


接下来,你要修复这个紧急问题。 我们来建立一个 hotfix 分支,在该分支上工作直到问题解决:



$ git checkout -b hotfix
Switched to a new branch ‘hotfix’
$ vim index.html
$ git commit -a -m ‘fixed the broken email address’
[hotfix 1fb7853] fixed the broken email address
1 file changed, 2 insertions(+)


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210207164434709.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NTgxOTYx,size_16,color_FFFFFF,t_70)


**分支合并**  
 基于`master` 分支的紧急问题分支`hotfix branch`,你可以运行你的测试,确保你的修改是正确的,然后将 hotfix 分支合并回你的 master 分支来部署到线上。 你可以使用 git merge 命令来达到上述目的:



$ git checkout master
$ git merge hotfix
Updating f42c576…3a0874c
Fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

支合并回你的 master 分支来部署到线上。 你可以使用 git merge 命令来达到上述目的:

$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
 index.html | 2 ++
 1 file changed, 2 insertions(+)



[外链图片转存中...(img-iHIlkuXx-1715631382402)]
[外链图片转存中...(img-a9aP3Zgl-1715631382403)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值