写给自己看的git教程

366 阅读8分钟

很早就学习过git的相关操作,但是使用过程中频率并不是很高,一共也就那么几个操作,总感觉缺点什么。

正奉国庆,坐在高铁上近六小时,于是开始写这篇博客,来回顾一下关于git的相关内容,权当是未来的知识库来使用

安装git

macos安装

使用homebrew的方式安装,命令行:

brew install git

查看版本号

git --version

window安装

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功

配置账户

git config --global user.name 英文名
git config --global user.email 邮箱名
git config --global push.default simple 
git config --global core.quotepath false 
git config --global core.editor "code --wait" 
git config --global core.autocrlf input

其次就可以开启git在本地仓库的一些应用了,实际上git本地仓库就是在你需要版本管理的目录下增加一个.git目录,来帮助你版本管理 注意这个目录不要是桌面 以免将你的桌面设置一个git目录,会传入很多桌面文件到git上去

创建库

创建一个空文件夹,使用以下命令行建立并初始化git仓库

git init

这时候会多出.git目录,不要修改,修改后会有问题,实际上git就是通过它来管理版本的。使用ls -al可以查看所有文件信息

常用命令

添加文件

git add .

.代表当前目录,当然也可以指定文件,我通常都是懒人做法

git add是把文件放到备选区,还没有正式提交给git

git commit -m 'xxxx'

通过git commit 将文件提交给git,后面的-m是message的意思,意思是写一句话来描述一下吧

查看当前目录下的文件与git之间的关联状态

git status

文件红色代表一点关系都没有 绿色代表已经进入备选了 还有已经进入git会提示 nothing to commit, working tree clean.

git status 通过这个指令可以看到文件与git之间的关系 关系分为未关联 已备选

查看添加过的版本情况

这个方法只能获得当前版本至初始版本的情况 不能获得切换过的所有版本的情况

git log

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数

想看所有版本情况

git reflog

如果想要查看所有切换过版本的情况以及切换过的操作情况则使用 也可看到commit后的版本号

git log 跟git reflog的区别

git reflog会记录所有信息,包括你穿越reset后的操作信息,git log只显示你当前版本到原始版本的信息

版本切换

这个操作需要add过的文件都commit 否则会删除掉add过的文件 git reset --hard xxxx(版本号)

撤销修改或删除

git checkout --<file名> 撤销到上一次commit或者add的状态,这里分两种情况,一是修改或删除后没有add,二是add后还进行了修改,那么通过这个命令行可以撤销回上一次的状态

撤销备选区

当git add后发现有问题,那么就可以使用这个命令行撤销

git reset HEAD <file>

删除文件

现在假设我把工作区的内容删除了,此时工作区与版本库不一致。

假设我确实需要删除,那么就使用以下命令行

git rm <file>

git commit -m 'xxx'

删错了就使用git checkout --<file名>来撤销修改或删除

分支管理

创建

如果你对同一个文件有两种不同的需求,那么可以创建分支来分开管理不同的线 git branch 分支名 创建了一个分支

创建分支就相当于拥有了两条线 master 和 x 你可以将同一个文件分开处理 这时候需要切换分支

切换分支

git checkout x 切换到x分支

git switch <name> 这个切换是新增的,推荐!!

我们可以在创建的同时切换分支 git checkout -b xx分支

git checkout master 切换到主分支

两条线路可以分开管理 你只需要在不同线上分别管理即可。

查看分支

git branch 列出所有分支

合并分支

git merge x 将当前分支和x分支合并

删除分支

git branch -d <name>

合并后解决冲突的方法

如果合并后发生冲突,这是常有的事情,例如在分支上跟主支上都修改了同一个文件的一句话,然后合并后,就会发生问题,git没办法帮我们识别到底需要那句话,于是就报冲突。我们可以这样解决:

  • git status -sb //查看哪个文件冲突
  • 找到对应的文件,一般git会通过======来标记,我们可以搜索====来找到对应的位置。
  • 删除标记=====,删除不要的内容
  • git add 对应的文件
  • git commit 这时候带-m 或者不带都可以
  • git log --graph查看分支合并情况

远程仓库

git文件可以放在云端进行管理,一般我们都会选择与github进行关联。 在与github关联前,需要做一些配置工作。为了方便我们上传,可以通过ssh key来关联本地仓库与github仓库的关系。

这种方式实际上就是在自己的电脑上放私有钥匙,github上放公有钥匙进行配对。 前提条件:需要电脑上已安装git

配置步骤:

  • ssh-keygen -t rsa -b 4096 -C 邮箱 一直回车 三次

  • cat ~/.ssh/id_rsa.pub # 得到公钥内容 在users目录内会有.ssh目录

  • 复制公钥的内容,粘贴到github的setting--ssh key中

测试是否已连接

ssh -T git@github.com

提示会问你yes or no 填yes即可。这个步骤是github给你返回了一个公钥来确认你是你

上传代码--两行代码 首先在github上面创建一个代码仓库 然后点击ssh(这个步骤很重要,不要点https 因为我们用了ssh key!!) 下面会提示两行代码

git remote add origin git@xxxxxx //表示在本地添加远程地址 仓库的名字默认origin

git push -u origin master //推送本地的分支到远程的master分支 写过一次这个代码 那么下次就不需要写全了

下次如果要提交就用git push即可

如果遇到git pull 那就输入git pull一下 一般需要git pull的情况是远程仓库发生了变动 需要与本地做合并

储藏

我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度保存起来,然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop来恢复之前的进度继续开发新功能。

下面来看一下git stash命令的常见用法

git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释

git stash list
显示保存进度的列表。也就意味着,git stash命令可以多次执行。

git stash pop [–index] [stash_id]

git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。

git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)

git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的

通过git stash pop命令恢复进度后,会删除当前进度。

git stash apply [–index] [stash_id]
除了不删除恢复的进度之外,其余和git stash pop 命令一样。

git stash drop [stash_id]
删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。

git stash clear
删除所有存储的进度。

目前我对储藏的用法是,当我在开发结束,想要提交代码,但是远端有可能别人已经先我提交了代码。

那么 git 会提示我先 git pull 一下,我这时候的做法是先用储藏将我当前修改的代码全部储藏起来,等我先 git pull 解决冲突后,再用 git stash pop 命令把储藏的给恢复起来。最后再 git push 到远端。

如何上传其他分支

方法1:

git push origin x:x

方法2:

git checkout x
git push -u origin x

下载别人的代码

git clone git@xxxxxxx

如果是自己的代码 可以用ssh 如果是别人的 可以用http的码

如果是不同机器 需要另外安装ssh 一个机子一个key

参考文档:www.liaoxuefeng.com/wiki/896043…