git使用入门

git使用入门

最近涉及到了团队开发,未进行合作需要使用git,但遇到了很多问题,所以这里稍微总结一下git的简单使用,以供参考

下载git

下载git很简单,这是官网

Git (git-scm.com)

进入官网选择download下载即可(我相信屏幕前的你应该是会一点英文的,跟着官网的引导走即可)

下载完成后打开cmd或者power shell,输入git -v回车后输出git版本即说明下载成功

接下来是两个简单命令

1
2
git config --global user.name XXXX #设置你的名字
git config --global user.email XXXX #设置你的邮箱

通过上面的两条命令完成你身份的认证后即可开始正常使用git了

使用git进行版本控制

首先,要说明的一点是,git的版本控制最好只使用在纯文本环境中,git本身无法直接的监控二进制文件的具体变化,只好在二进制文件每次发生变化时将之完整的保存一份,长期会导致仓库体积的迅速膨胀(当然,这对新手来说不会是什么大的问题)

其次,当前有很多使用git的图形化工具,各大ide也都集成了git的相关功能,但这里的讲解主要使用命令行完成,因为在你完全掌握了命令行的使用时,再使用图形化界面就很轻松了,更不用说很多时候我们不得不使用命令行

创建仓库

想要通过git管理你的代码,首先要在对应的文件夹下初始化一个git仓库

首先,打开powershell,你会用到这些命令

1
2
3
D: #这是切换至D盘的意思,使用此命令切换至你要创建仓库的存储空间下
cd XXX\XXX #cd是移动至对应的目录下的指令后面加具体的地址
cd .. #这是返回上一级目录(cd是不能访问当前目录之外的文件夹的)

好的,到这里,我假设你已经成功的来到了你要创建仓库的文件夹下了(如果没搞定的话也可以直接在文件资源管理器中右键对应的文件夹,找到从终端打开,点击即可),接下来就是新建仓库了,使用下面这条命令

1
git init

代码的提交与保存

接着我们来了解一下git中的几个基本概念

在一个建立了仓库的文件夹下,文件的状态头四种, 未被监控,工作区,暂存区与仓库

未被监控很好理解,直接跳过

工作区即我们写代码的区域,我们能够看见的文件就处于这个区域

暂存区是暂时存储文件的区域,不过嘛,以我个人的看法,这玩意意义不大,可以忽略

仓库是我们保存各个版本的文件的区域

接下来是两个常用的命令

1
2
git add #add后夹要提交的文件,注意要有后缀,此外如果想要提交全部的内容 则加 .
git commit -m "提交信息"#将暂存区的文件全部提交至仓库内,双引号内是你对这次提交的说明,根据实际情况填写

这样,你的代码就被保存到对应的仓库中了

代码版本的查看与回滚

在进行提交以后,你提交时代码的状态就被完整的保存下来了,如果需要查看提交记录

使用git log来查看提交记录,此时你会看到某个版本的提交者,提交时间,提交说明与一长串意义不明的的十六进制数字

这一长串的数字对应了某个版本的哈希,是该版本的唯一标识,如果你需要将代码的状态回滚到某个版本,请将对应的哈希复制,然后使用如下命令

1
2
git reset --hard 对应的哈希
git reset --hard HEAD^ #如果你希望回退至上一个版本,直接使用这个命令

这里需要解释一下--hard是硬的意思,即强制回滚到原来的版本,还有软,混合,保留三个模式,但相信我,你不会需要它们的

分支

接下来要将的就是git的最爽的用法了,git的分支

先来看看基本的命令

1
2
3
4
5
git branch 分支名#从当前分支创建分支
git branch -v#查看分支
git checkout 分支名#切换分支(注意只有在当前分支的文件全部被提交后才可执行此命令)
git branch -d <branch-name>#删除分支
git merge 需要合并的分支名#把指定的分支合并到当前分支上

什么是分支,如果将一个项目想象成一棵树,那么这些分支就是树的树干,有时候想要对你的代码进行修改有不确定会不会搞出一些不可预知的问题?直接创建一个新的分支,随意的改造他,在你满意之后将其合并回主分支即可,如果不小心玩崩了,那就把这个分支删了

当然,分支功能更常用在团队开发中,每人拥有独立的分支,在完成对应的工作后再将自己的分支合并回主分支,避免对其他人的工作中造成影响

那些奇奇怪怪的翻译

由于国内奇奇怪怪的翻译,不少人在使用图形化界面时会遇到困难,下面对一些有代表性的做出解释

  1. 签出

    这个名字真的稀烂,完全让人看不懂他会干涉,其实就是checkout,不过,checkout的用法不只是切换分支,具体如下

    • 加分支名切换分支
    • 加版本哈希则跳转至对应的版本,注意,此时你并不在任何分支上,你无法进行提交,但如果你又希望保存你的修改,使用git checkout -b new-branch-name创建一个新的分支,之后就可以正常提交了
    • 加对应的文件,则将当前文件的内容还原至仓库中的最新版本

    说来说去,从checkout的英文含义我们可以理解,这个命令是检查,查看的意思,后面加什么,就是对应的查看什么

  2. 合并

    merge,这个不必多说

  3. 变基

    git rebase 要变基到的分支,这是一个前面没有说过的命令,这玩意的英文名称就让人看不懂要表达什么,更不用说这个奇奇怪怪的中文了

    简单的理解是merge会将两个分支的最新版本比较,最后在主分支上创建一个全新的版本

    而rebase会把分支的每个版本都提交到当前分支,这可以用来整理项目的历史

    此外git rebase -i HEAD~N 可以将最近的N个提交整合为一个,

    建议新手不要随意使用,会出问题的

配置SSH秘钥

在了解远程仓库的使用之前,先要配置自己的SSH秘钥

由于众所周知的原因,在国内访问github需要一定的技巧,而在实际使用中当我们需要提交相关的代码至远程仓库时,我们不得不面对不易寻找到可用的梯子的问题,这是通过SSH秘钥进行访问就是一种很好的解决方法,略去原理不谈,下面简单介绍一下配置方法

首先,打开cmd,输入

1
ssh-keygen -t rsa -C "你的邮箱"

接下来一路闭着眼按回车就行了(接下来弹出的内容是设置密码,对新手来说没什么必要),完成后的效果如图

image

注意,上图中的第三行提供了你的秘钥的保存路径,你将会看到id_rsa与id_rsa.pub两个文件,前者就是你的私钥,你应该保存好,不向任何人泄露.而公钥部分则可以打开后粘贴到github的个人密码配置中,此后你的电脑就能通过ssh访问github了

那么我们如何在github上配置自己的秘钥呢,只需要打开github登录后进入个人页面,选择settings,进入如下界面

image

选择SSH and GPG keys选项

image

选择绿色的New SSH Key选项即可,在跳转的页面中将自己的公钥内容粘贴至框中即可,注意,应当复制公钥的全部内容,包括首行看起来像是题目的东西

远程仓库

接下来聊一聊远程仓库的事,这也是团队开发的关键

1
2
3
git clone 项目远程地址#用来从远程仓库获取对应地址的项目
git pull#拉取操作,获得远程仓科的最新版本
git push#将代码推送至远程仓库

这三个命令是最基础的,很容易理解

接下来是进阶使用

1
2
3
4
5
6
7
8
git remote -v#查看远程仓库的信息
git remote add <remote-name> <remote-url>#设置远程仓库,name为名称,URL为地址
git remote set-url <remote-name> <new-remote-url>#更新远程仓库地址
git push <remote-name> <branch-name>#将当前分支推送到对应仓库的队友分支
git pull <remote-name> <branch-name>#获取某远程仓库的特定分支
git fetch <remote-name>#获取远程仓库的所有内容,但不会自动合并分支
git push -u <remote-name> <branch-name>#将当前分支推送至特定远程仓库的新建分支
git push <remote-name> --delete <branch-name>#删除某远程分支

强调一下,上面的fetch效果类似于checkout到特定版本的效果,此时你不处于任何分支当中,你需要新建一条分支来进行进一步的操作

git冲突

这是很多程序员的噩梦,当同一个文件的同一处被两个不同的人进行了两次不同的修改后第二人进行提交,或者两个分支都对某处进行了修改时而你选择将它们合并在一起,以及种种对同一文件同一处进行修改时,就可能造成git冲突,即git无法正确的判断文件到底该怎样的进行保存,这时,就需要手动处理冲突,git会提示冲突的地方,你只需要选择保留哪个版本或者对自行对两个版本整合即可

具体的整合可以通过fetch或pull远程最新的提交后再在本地拉一条新的分支,对照不同分支进行修改,完成后把这个新分支合并到自己的分支上

在整合完成后再此进行提交,此时git会认为你已经解决了冲突,会按照你提交的版本进行保存

当然,如果push仍然报错,请使用这个

1
git push --force-with-lease

这个玩意会强制推送,以你的本地内容为准,但会检测有没有其他人在你上次pull之后提交,避免覆盖其他人的工作成果

最后的最后,永远不要使用git push --f,这会覆盖掉其他人写的代码的!!!

终于搞定了,来,最后放图


git使用入门
http://soulmate.org.cn/2024/12/02/git使用入门/
作者
Soul
发布于
2024年12月2日
许可协议