一、 Git配置
1.安装Git
$ sudo apt inatsll git
2.绑定git仓库
本地命令行生成密钥,替换成自己邮箱,然后一路回车。
$ ssh-keygen -t rsa -C "你的邮箱"
$ cat ~/.ssh/id_rsa.pub
将生成的公钥打印出来复制,将这串文本复制粘贴到Gitlab的profile/keys中。
Add key
输入命令检查是否绑定成功,如果出现Welcome to GitLab, @xxx!!则绑定成功。
$ ssh -T git@gitlab.xxx.com
3.配置用户名和邮箱:
查看配置信息,一开始为空:
$ git config --list
全局配置,对所有代码库生效:
$ git config --global user.name "你的名字"
$ git config --global user.email "你的邮箱"
局部配置,只对当前的代码库有效:
$ git config --local user.name "你的名字"
$ git config --local user.email "你的邮箱"
配置后,远程仓库提交的commit里对应的用户即为 user.name
。
二、Git基本操作
1.创建版本库
创建版本库有两种方式,一种是将本地的文件夹直接变成一个git仓库,另一种是直接将远程的仓库克隆到本地。
$ git init # 将本地文件夹变为一个git仓库
$ git clone <url> # 将远程仓库克隆到本地
<url>
分为两种类型:git@xxx.git
https:xxx.git
其中https的链接在后续操作中需要多次输入账户名,密码。
2.修改与提交操作
$ git add <file> # 将单个文件从工作区添加到暂存区
$ git add . # 将所有文件添加到暂存区
$ git commit -m "messenge" # 将暂存区文件提交到本地仓库
$ git status # 查看工作区状态,显示有变更的文件。
$ git diff # 比较文件的不同,即暂存区和工作区的差异。
3.远程操作
$ git push origin master # 将本地的master分支推送到远程对应的分支
$ git pull # 下载远程代码并合并,相当于git fetch + git pull
$ git fetch # 从远程获取代码库,但不进行合并操作
$ git remote add origin <url> # 将远程仓库与本地仓库关联起来
$ git remote -v # 查看远程库信息
4.合并最近两次commit
一次commit
的时候,发现有段代码没写好,就补了一句以后再commit
了一遍,这样就有两条commit
语句了。应该把之后补的那条合并到前面去。
这时候就需要git rebase
语句:
$ git rebase -i HEAD~2
当前我们只要知道 pick
和 squash
这两个命令即可。
- pick 的意思是要会执行这个 commit
- squash 的意思是这个 commit 会被合并到前一个commit
()
根据提示,把第二个“pick”改成“squash”,这样就可以把第二个commit合并到到第一个里,修改并保存后会自动进入下一个页面(这里忘记截图了),
然后修改commit信息,保存即可,此时查看git log
,commit已经改变了。
5.撤销与回退操作
①撤销操作:
当修改了工作区/暂存区的文件,但是还没有commit时,想要撤销之前的操作:
场景1:当你改乱了工作区某个文件的内容,但还没有add到暂存区
$ git checkout <file> # 撤销工作区的某个文件到和暂存区一样的状态
场景2:当乱改了工作区某个文件的内容,并且git add到了暂存区
$ git reset HEAD <file> # 第1步,将暂存区的文件修改撤销掉
$ git checkout <file> # 第2步,将工作区的文件修改撤销掉
场景3:乱改了很多文件,想回到最新一次提交时的状态
$ git reset --hard HEAD # 撤销工作区中所有未提交文件的修改内容
②回退操作:
当已经进行了commit操作,需要回退到之前的版本:
$ git reset --hard HEAD^ # 回退到上次提交的状态
$ git reset --hard HEAD~n # 回退到n个版本前的状态
$ git reset --hard HEAD commitid # 回退到某一个commitid的状态
$ git reset --soft HEAD commitid # 回退到某一个commitid的状态,并且保留暂存区的内容
$ git reset --mixed(默认) HEAD commitid # 回退到某一个commitid的状态,并且保留工作区的内容
③找回被误删的分支:
第一步,历史操作记录
$ git reflog show --date=iso
# git reflog用来记录你的每一次命令。
# --date=iso 表示以标准时间显示,这里要注意的是不能用git log。
# git log 命令显示从最近到最远的提交日志,当分支被删掉就找不到记录了。
从每一次的命令里,找到你想要恢复的那次commit,也就是你删除的分支的commit。
第二步,在历史操作记录中找到具体commitId
$ git show a02ba0262
# 查看commitId对应的提交详情,确认是否想要恢复
第三步,根据commitId恢复被删除的分支到本地
$ git checkout -b <name> commitId
三、Git分支管理
git的最强大之处就在于分支管理了,具体有两种应用场景:
1.多人协作:
每个人都基于主分支创建一个自己的分支,在分支上进行开发,然后再不断将写好的代码合并到主分支。
2.自己修复bug/增加feature:
创建一个bug分支或者feature分支,写好代码后合并到自己的分支然后删除bug/feature
分支。
$ git branch <name> # 创建分支
$ git checkout <name> # 切换到某个分支
$ git checkout -b <name> # 创建并切换到新分支,相当于同时执行了以上两个命令
$ git merge <name> # 合并某个分支到当前分支中,默认fast forward
$ git branch -a # 查看所有分支
$ git branch -d <name> # 删除分支
$ git branch -D <name> # 强行删除分支