git基础
Extious

安装git

网址https://git-scm.com/downloads上安装

安装之后要设置自身全局配置

1
2
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

创建版本库

初始化一个git仓库

1
git init

添加文件到git仓库

1
git add <file>

分支管理

本地

commit

1
2
# git commit 命令会在本地新生成一个节点
git commit

branch

分支相当于节点指针

1
2
3
4
5
6
# 生成新分支
git branch newbranch
# 切换到另一个分支
# 也可以使用 git checkout newbranch
# -b可以缺省新建分支
git switch newbranch

merge

1
2
# 合并其他分支
git merge newbranch

rebase

1
2
# 变基到其他分支上完成合并
git rebase newbranch

checkout

checkout可以让你的工作区在各个结点之间自由移动

1
2
3
4
5
6
# 使用哈希值
git checkout commit_id
# 使用分支名
git checkout newbranch
# 使用相对引用
git checkout main^

提交

1
git commit -m "message"

可以将上边的添加和提交和在一个命令中

1
2
3
git commit -a -m "message"
#or git commit -am "message"
#注意:新增文件没有被commit

修改最近一次提交

1
git commit --amend

时光穿梭

版本回退

查看工作区状态

1
git status

查看修改的内容

1
git diff

查看提交历史,可以得知提交ID,即commit_id

1
git log

reset

HEAD指向的是当前的版本,使用命令指向历史的版本

1
2
3
4
5
6
git reset --hard commit_id
#根据commit_id回退到指定版本
git reset HEAD^
#将版本库回退一个版本,一个^一个版本
git reset HEAD~n
#将版本库回退n个版本

reset命令中有三个参数

  • soft:软回退表示将本地版本库的头指针重置到指定的版本,且这次提交后的所有变更移动到暂存区
  • 默认mixed:将本地版本库的头指针重置到指定的版本,且重置暂存区,所有变更移动到工作区
  • hard:将本地版本库的头指针重置到指定的版本,重置暂存区和工作区

此外:git reset HEAD filename 回退文件,将文件从暂存区回退到工作区,不能使用参数

reflog

重返未来则用命令

1
2
git reflog
#查看所有分支的操作记录之后使用git reset --hard commit_id命令回到原来的版本

Git stash用法

Git stash用于将未提交的修改保存起来,用于后续恢复当前工作目录

1
2
3
4
5
6
7
8
9
git stash save "stash_name"
#给每一个stash加一个message,用于记录版本
git stash pop
#or git stash apply
#恢复最新缓存的工作目录(第一个),并删除缓存堆栈中的哪个stash(pop删除但是apply不删除)
git stash list
#查看所有的stash,在使用git stash之前使用,默认是第一个
git stash drop
#移除最新的stash,后边也可以跟指定的stash的名字

工作区和暂存区

工作区git add到暂存区,然后git commit到本地仓库

管理修改

只有git add之后才能git commit到本地仓库

查看工作区和版本库里最新版本的区别:

1
git diff HEAD --<file>

撤销修改

场景1:当改乱工作区的文件内容后,要丢弃修改

1
git checkout --file

场景2:如果已经添加到了暂存区要丢弃修改,先:

1
git reset HEAD <file>

在按场景1操作。

场景3:提交到了版本库,参考版本回退

删除文件

先rm file删除工作区文件,在使用命令删除本地仓库文件

1
2
git rm file
git commit -m "remove file"

如果删错了,版本库中还有,可以一键还原

1
2
3
4
git checkout -- file
#从版本库中拉取
git checkout --hard HEAD
#从版本库中拉取,撤销所有的更改

git checkout其实是用版本库里的版本替代工作区的版本,无论修改还是删除都可以一键还原

远程仓库

添加远程库

首先创建ssh key

1
ssh-keygen -t rsa -C "youremail@example"

在用户主目录里找到.ssh目录,id_rsa.pub是公钥,将里边的ssh复制,在GitHub上打开Account settings的“SSH Key“页面

然后将本地库和远程库关联

1
git remote add origin git@server-name:path/repo-name.git

上述命令中origin是指定的远程库名称

然后是将本地库的代码推送到远程库

1
git push -u origin master

第一次要有-u,上述的master为分支的名称,首次会发生警告

查看远程库信息

1
git remote

从远端库克隆

与远程库建立关联后可以直接git clone

1
git clone git@server-name:path/repo-name.git

也可以使用https协议

如果要克隆gitlab中的项目,要输入username和password登录,GIT_TERMINAL_PROMPT控制是否会出现登录界面

分支管理

Feature分支

切回dev分支

1
git switch dev

强行删除分支:

1
git branch -D feature-vulcan

多人协作

查看远程库信息

1
2
git remote
git remote -v

推送分支

1
2
3
4
5
6
7
8
9
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master
#将本地的master分支推送到origin主机的master分支,如果master不存在则会被新建
git push origin :master
#等同于git push origin --delete master,表示删除指定的远程分支
git push origin
#如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可省略
git push
#如果当前分支和多个主机存在追踪关系,可以使用使用git push -u origin master指定一个默认主机,之后就可以直接使用git push

抓取分支

1
git clone [email protected]:username/reporstoryname.git

注意clone的时候只能clone到main这一个分支

clone其他分支时

1
git checkout -b dev origin/dev

当与他人的合并产生冲突时先git pull

1
2
3
4
5
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master:test
#将远程的master分支和本地的test分支合并
git pull origin master
#默认和当前分支合并

解决冲突后再推送

如果git pull还是失败,那么因为本地dev和远程的origin/dev未建立链接,应设置链接

1
2
git branch --set-upstream-to=origin/dev dev
git pull

rebase操作可以把本地未push的分叉提交历史整理成直线

标签管理

创建标签

切换到本分支

1
git tag v1.0

git tag 可以查看到所有标签

如果要打历史的标签可以先查找历史版本

1
git log --pretty=oneline --abbrev-commit

上边–pretty=oneline表示每个版本一行输出;–abbrev-commit表示提交号只显示前几位,找到对应的commit id

1
git tag v0.9 f52c633

若要查看标签信息

1
git show v0.9

还可以给标签添加信息说明

1
git tag -a v0.1 -m "version 0.1 released" 1094adb

操作标签

删除标签

1
git tag -d v1.0

将标签推送到远程库

1
2
git push origin v1.0
git push origin --tags

删除远程库的标签

1
2
git tag -d v0.9
git push origin :refs/tags/v0.9
由 Hexo 驱动 & 主题 Keep
总字数 39.4k 访客数 访问量