我在工作中如何使用 git

 2024-02-02 04:03:16  阅读 0

版本控制器git_版本控制之道_版本控制之道:使用git

最近,有一个真实的案例在网络上颇为火爆。 讲述的是一名新员工无法使用 Git 拉取代码,第二天就被解雇的故事。 由此可见Git对于我们工作的重要性。 无论是前端还是后端,都离不开Git。 下面就让我们来了解一下吧。

上述案例引出了一个问题:当你加入一家新公司,并被分配了仓库权限时,你如何配置本地Git环境并拉取代码? 不要惊慌,按照下面我将解释的四个步骤,确保您可以成功使用 Git 拉取代码!

下载Git下载地址,选择自己系统对应的版本进行下载。 在你的电脑上生成ssh密钥,打开终端,执行ssh- -t rsa -C“你公司的内部电子邮件地址”。 如果执行成功,则切换到~/.ssh目录。 该目录应如下所示。 复制 .pub 的内容。

以此为例,如下图所示,输入->SSH和GPG密钥,使用cat命令查看.pub文件的内容,然后将其复制过来,点击添加ssh密钥。 这一步相当于把你的公钥放在互联网上进行托管。

全局配置 Git 用户名和电子邮件

git config --global user.name "xxx"
git config --global user.email "xxx@xx.com"
复制代码

完成以上四个步骤后,就可以愉快地拉取代码开发了。 与https拉取方式不同,https方式需要您在每次提交前手动输入用户名和密码。 配置好ssh方式后,Git会使用你本地的私钥和远程仓库的公钥来验证是否是一对秘钥。 键,从而简化了操作过程。

Git 简介

在介绍Git的相关操作之前,我认为非常有必要了解一下Git的起源以及Git是用来解决什么问题的。 Git(发音为/gɪt/)是一个开源分布式版本控制系统,可以高效、高速地处理从非常小的项目到非常大的项目的版本管理。 Linus,相信大家都认识这个人,开源Linux系统的发明者。 如今,你看到的大多数服务器实际上都运行在Linux系统上。 令人惊奇的是,这位大师级程序员不仅创造了Linux系统。 那么Linux代码是如何管理的呢? 2002年之前,世界各地的志愿者通过diff将源代码文件发送给Linus,然后Linus亲自手动合并代码! 要知道当时Linux的代码量已经非常大了。 人工管理容易出错且效率低下。 所以Linus选择了商业版本控制系统。 出于人道主义精神,他的雇主授权Linux社区免费使用这个版本控制系统。 最后由于某种原因,公司撤销了Linux社区的免费使用权,于是Linus花了两周的时间用C语言写了一个分布式版本控制系统。 这就是 Git 的起源。

Git 工作区域和流程

如果我们想要了解 Git 如何管理我们的代码,首先要做的就是了解 Git 工作区的结构。 因为只有彻底理解了Git工作区的结构,才能在合适的区域使用合适的命令。 如下图所示,该图包含了Git的四个工作区以及一些常用的操作。

:工作空间是通常进行开发和更改的地方。 在这里您可以看到最新的内容。 开发过程也是工作空间的运行。

索引:暂存区。 当执行git add命令时,工作区中的文件将被移动到暂存区。 暂存区标记当前工作区中由 Git 管理的那些内容。 当某个需求或者功能完成后,需要提交代码后,第一步就是通过git add提交到暂存区。

:本地仓库,位于你自己的电脑上。 通过git提交暂存区的内容会进入本地仓库。

:远程仓库,用于托管代码的服务器。 远程仓库的内容可以由分布在多个地点的协作关系中的本地仓库修改。 修改本地仓库中的代码后,通过git push命令将代码同步到远程仓库。

一般来说,Git的工作流程分为以下几个步骤

1.在工作区开发,添加,修改文件。
2.将修改后的文件放入暂存区。
3.将暂存区域的文件提交到本地仓库。
4.将本地仓库的修改推送到远程仓库。
复制代码

Git基本操作 git add

将文件添加到暂存区

# 添加某个文件到暂存区,后面可以跟多个文件,以空格区分
git add xxx
# 添加当前更改的所有文件到暂存区。
git add .
复制代码

git

# 提交暂存的更改,会新开编辑器进行编辑
git commit 
# 提交暂存的更改,并记录下备注
git commit -m "you message"
# 等同于 git add . && git commit -m
git commit -am
# 对最近一次的提交的信息进行修改,此操作会修改commit的hash值
git commit --amend
复制代码

git拉

# 从远程仓库拉取代码并合并到本地,可简写为 git pull 等同于 git fetch && git merge 
git pull <远程主机名> <远程分支名>:<本地分支名>
# 使用rebase的模式进行合并
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
复制代码

git 获取

与 git pull 不同的是,git fetch 操作仅拉取远程更改,不会自动执行合并操作。对您当前的代码没有影响

# 获取远程仓库特定分支的更新
git fetch <远程主机名> <分支名>
# 获取远程仓库所有分支的更新
git fetch --all
复制代码

git

# 新建本地分支,但不切换
git branch  
# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 查看本地和远程分支
git branch -a
# 删除本地分支
git branch -D 
# 重新命名分支
git branch -m  
复制代码

使用Git解决工作中问题的场景。 Git让你的提交记录更加清晰易读。 如何使用Git

翻译过来就是,它的功能和merge很相似,都是用来将一个分支的修改合并到当前分支中。

如下图所示,下图介绍了通过后提交历史记录的变化。

现在我们用一个例子来解释一下上面的过程。

假设我们现在有 2 个分支,一个是,一个是 /1。 他们都根据初始提交添加检查分支。 之后,分支添加文件3.js和4.js,并分别进行2次提交。 ,/1还添加了文件1.js和2.js,分别对应下面2条提交记录。

此时对应分支的记录如下。

分支如下图:

/1分支如下图

组合起来,看起来像这样

版本控制之道:使用git_版本控制器git_版本控制之道

此时切换到/1分支,执行git。 成功后通过git log查看记录。

如下图所示:可以看到,首先一一应用了 mater 分支的更改,然后以该分支的最后一次提交为基点,一一应用了 /1 的每个更改。

版本控制器git_版本控制之道:使用git_版本控制之道

所以我们的提交记录会非常清晰,不会出现分叉。 上面的演示是比较顺利的情况,但是大多数情况下,过程中会出现冲突。 这时,我们需要手动解决冲突,然后使用 git add 和 git -- 来处理冲突并完成该过程。 如果你不想要某个结果,则需要使用 git --skip 跳过此操作。

git merge 和 git 的区别

与 git 不同的是,git merge 在速度不快时会生成一条额外的合并记录(fast merge),类似于 Merge 'xxx' into 'xxx' 的提交消息。

另外,解决冲突时,使用merge时只需要解决一次冲突,简单粗暴。 然而,当使用合并时,您需要在提交之前按顺序解决每个冲突。

git交互模式

在开发中,我们经常会遇到某个分支上有很多无效的提交。 这种情况下,采用的交互方式可以将已经发生的多次提交压缩为一次提交,并获得一份干净的提交历史记录,比如某个分支的提交历史记录如下:

进入交互模式的方法是执行:

git rebase -i 
复制代码

参数base-是指定提交对象的操作基点。 操作都是基于这个基点进行的。 对于上面提交历史的例子,我们需要将最后一个提交对象( )之前的提交压缩为一次提交。 我们需要执行的命令格式是:

git rebase -i ac18084
复制代码

此时会进入vim的交互页面,编辑器中列出的信息如下。

为了合并这堆变化,我们需要使用一个合并策略,即将当前的与其之前的内容合并。 可以表示如下。 在交互模式下,至少应保留一项选择,否则命令将被执行。 失败。

pick  ... ...
s     ... ... 
s     ... ... 
s     ... ... 
复制代码

修改文件后,按:,然后wq保存退出。 这时会弹出一个编辑页面。 该页面用于编辑提交的信息。 改成 feat: ,最后保存,然后用git查看提交的信息。 提交后记录如下图所示。 是不是清爽了很多呢? 行动可以让我们的提交历史更加清晰。

特别需要注意的是,只能对自己使用的分支进行操作,不允许对集成分支进行操作,因为此类操作会修改集成分支的历史记录。

使用 git -pick 获取指定的

git -pick 可以理解为“挑选”提交。 与合并一个分支的所有提交不同,它会获得一个分支的单个提交,并将其作为新的提交引入到您当前的分支中。 当我们需要在本地合并其他分支的提交时,如果我们不想合并整个分支,而只想将某个提交合并到当前本地分支中,那么我们就需要使用 git -pick 。

在下面的场景中,有以下三个分支。 /-pick1 和 /-pick2 都基于签出的两个功能分支。 对应的分支日志记录如下

版本控制器git_版本控制之道_版本控制之道:使用git

版本控制器git_版本控制之道:使用git_版本控制之道

分支的如下

现在我们只需要/-pick1和/-pick2相关的修改,不关心fix内容的修改。 此时就可以使用-pick命令了。

语法: git -pick [-hash]

-hash 代表某个时间的哈希值。现在依次执行下面两条指令 git -pick 和 git -pick 。 如果过程中出现冲突,解决冲突后执行git add,然后执行git -pick --。 最后上面提交的内容如下

至此,所需的提交已应用到分支上,并达到了预期的效果。 如果需要多次-pick,需要同步到目标分支,可以简写为 git -pick...,是一个左开右闭的区间,表示所带来的代码变更第一个--id提交不会被Merge过去。 如果需要合并过去,可以使用 git -pick ^... ,这意味着包括first--id到last--id的提交都会被合并。

使用 git 回滚提交

想象一下这样一个场景,你的项目的两个版本最近即将上线。 这两个版本还修复了过去遗留的错误。 一开始,您修复了第一个版本分支上的错误。 突然,在发布的前一天,测试团队报告说第一个版本中的错误修复需要更改为第二个版本。 此时提交的第一版本集成分支应该包含第一版本的功能。 内容、遗留错误修复的提交以及其他同事提交的内容。 想要通过重置来粗暴地去除之前的bug修复是肯定不可能的。 同时,这种做法也比较危险。 这个时候我们既不想销毁之前的记录,又想撤回我们遗留bug的记录怎么办? git 派上用场了。

git 撤销一个操作。 该操作不会修改原来的提交记录,而是会添加一条新的提交记录来偏移操作。

语法: git 表示正常

git -m 用于合并

我们用一个案例来理解一下这个命令,如下图所示。 假设红框圈出的地方是会导致bug的提交。 在他提交后,又提交了两份意见,其中包括其他同事的意见。 提交。

这时候我想把导致提交的bug改掉。 运行 git。 执行完操作后,打开查看日志。 如下图所示,可以看到新增了一条记录。 生成的消息是自动生成的。 一开始,撤回-msg消息之前的记录并没有消失,此时也达到了代码回滚的效果。

另外,git还可以回滚多个提交。

语法:git [-id1] [-id2] ... 注意,这是一个前开后闭区间,即不包含,而是包含。

有两种方法可以回滚我们的提交。 一是除了上面提到的git命令之外,还可以使用git reset命令。 那么它们之间有什么区别呢?

git 将创建一条新消息来撤消之前的修改。

git reset 会直接返回指定的提交记录。

对于个人分支,可以使用 git reset 回滚历史记录,然后使用 git push --force 推送到远程。 但如果是多人协作的集成分支,不建议直接使用git reset命令。 使用更安全的 git 命令来撤消提交。 这样,提交历史就不会被删除,并且可以安全地撤回。

使用 git stash 暂存文件

会有这样一种情况,您正在分支上开发新功能。 这时候生产环境出现了bug,需要紧急修复,但是你的那部分代码还没有开发出来,你又不想提交。 你该怎么办? 这时可以使用git stash命令将修改后的文件暂时存放在工作区中,然后切换到分支来修复bug。 修复完成后,切换回分支,从堆栈中恢复刚刚保存的内容。

基本命令如下

git stash //把本地的改动暂存起来
git stash save "message" 执行存储时,添加备注,方便查找。
git stash pop // 应用最近一次暂存的修改,并删除暂存的记录
git stash apply  // 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即 stash@{0},如果要使用其他个,git stash apply stash@{$num} 。
git stash list // 查看 stash 有哪些存储
git stash clear // 删除所有缓存的 stash
复制代码

我们通过几张图来仔细看看stash命令。

此时我正在开发一个新的功能,修改了1.js文件中的内容

开发尚未完成。 这时候我想切换到分支来修复bug。 我必须暂停开发并切换到分支。 但是,工作区中仍然有内容。 如果我此时切换到分支,Git会报如下错误。

error: Your local changes to the following files would be overwritten by checkout:
        1.js
Please commit your changes or stash them before you switch branches.
Aborting
复制代码

上面这句话的意思是工作空间中有文件修改,无法提交。 您需要先执行或隐藏操作。 执行 git stash. 结果如下。

Saved working directory and index state WIP on stash: 22e561c feat: add 1.js
复制代码

此时,我们的工作区已经干净了,我们可以切换到分支来修复错误。 假设我们现在已经完成了bug修复,继续切换回分支来开发原来的功能。 这时候我们只需要执行git stash pop即可。 我们之前的临时更改将被恢复到工作区中,如下图所示。

当我们想要临时存储文件并切换分支做某事时,我们可以使用git stash机制来帮助开发。

建议使用stash相关命令时,不要每次都直接使用git stash命令进行临时保存,而是使用git stash save "..."方法为本次提交创建一条消息。 的记录. 这样,当你想要应用更改时,首先通过 git stash list 检查所有的 stash 列表。 之后,建议使用 git stash apply stash@${num} 来应用相应的 stash。 这不会清除现有的隐藏列表项,并且可以应用于当前工作区。 如果不需要这个临时存储,那么手动清除即可。

撤消不同工作区域中的更改

在开发过程中,我们经常需要回滚代码操作。 在不同的工作领域,回滚代码的方法也不同。 如下图所示,假设我们现在要在/分支上开发,

首先通过git查看当前状态。

目前,我们的工作空间非常干净,没有任何修改操作。 这时修改代码,再次查看状态。 可以看到1.js文件已经被修改了。

现在我们要将文件1.js恢复到修改前的状态,即撤销工作区中的修改,我们可以使用git --命令。 如果我们要撤消多个文件的修改,可以使用空格来分隔文件,如下图所示,我们已经撤消了对1.js文件的修改,工作区也恢复干净了。

如果我们已经修改了文件并提交到了暂存区,并且我们不想要这部分文件了,我们可以使用 git reset 命令来撤销特定的文件。 git reset 将撤消所有现有的临时文件。 存储区中的文件如下图所示。 查看前后状态,可以看到文件已成功撤回工作区。

配置git别名,提高工作效率

一般在工作中,接到一个开发任务后,我们需要创建一个新的分支进行开发。 这时候我们就需要用到git、git、git pull等命令。 我们操作之后,开发就完成了,接下来就是提交代码了。 git add、git、git push 等命令虽然简单,但输入起来不够简洁。 作为一名程序员,开发程序就是为了提高我们的效率。 懒惰是人类进步的源泉,所以我们可以通过配置别名的方式来简化这些命令。

它的基本用法是git——别名。 原始命令

比如下面的例子:

$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
复制代码

这里co表示,ci表示,br表示,以后提交时可以缩写为。

-- 是全局参数,即配置一次后,这些命令可以应用到本机下的所有仓库。 这些命令实际上更新了您的全局 . 文件,用于保存全局git配置,vim ~/.. 执行该命令后,显示如下。 下图是刚刚通过git --alias 添加的别名。

除了上面的直接命令方法之外,还可以通过修改这个文件的alias项来设置别名。

这里分享一个我常用的别名设置。 将以下配置替换为 . 文件所属,然后就可以愉快的使用啦~

[alias]
st = status -sb
co = checkout
br = branch
mg = merge
ci = commit
ds = diff --staged
dt = difftool
mt = mergetool
last = log -1 HEAD
latest = for-each-ref --sort=-committerdate --format=\"%(committername)@%(refname:short) [%(committerdate:short)] %(contents)\"
ls = log --pretty=format:\"%C(yellow)%h %C(blue)%ad %C(red)%d %C(reset)%s %C(green)[%cn]\" --decorate --date=short
hist = log --pretty=format:\"%C(yellow)%h %C(red)%d %C(reset)%s %C(green)[%an] %C(blue)%ad\" --topo-order --graph --date=short
type = cat-file -t
dump = cat-file -p
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
复制代码

这样,每次我们想要查看Git的历史记录时,就不用输入一长串命令,直接使用git lg即可。 下图是axios源码中的提交记录,以及使用封装后的git lg查看的效果。

分支之间的关系一目了然,合并操作在哪个分支上也一目了然,可以帮助我们追溯历史提交,解决问题。

总结

本文由浅入深讲解了Git环境搭建、基本使用以及工作中比较常用的Git命令的使用方法。 无论你是开发前端、后端还是其他端,日常工作中都离不开Git的使用。 我们不但要你会用,而且要你用得漂亮、灵活、稳。 只有这样,你才能在与同事协作项目时更加得心应手。 学习完本文的Git使用技巧后,在日常工作中多加练习。 相信会给您带来巨大的收获!

标签: 提交 分支 操作

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码