很早就学习过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