0%

git

git

创建版本库

1
2
3
4
5
6
mkdir learngit
cd learngit
pow

git init//把这个目录变成Git可管理的仓库

版本回退

git status可以查看状态

git log命令显示从最近到最远的提交日志

在 Git 中,用HEAD表示当前版本,上一个版本就是HEAD^,上上个版本就是HEAD^^

git reset --hard HEAD^把当前版本回退到上一个版本

git reset --hard 版本号回退到目标版本

版本号可以通过git log查看

git reflog用来记录每一次命令

工作区和暂存区

工作区就是在电脑里能看到的目录

.git目录就是Git的版本库,里面含有暂存区,还有master分支以及指向master的第一个指针HEAD

git add 文件名是把文件修改添加到暂存区

git commit -m "修改备注"是把暂存区的所有内容提交到当前分支

撤销修改

乱改了工作区的某个文件的内容,想直接丢弃工作区的修改

git checkout -- readme.txt

  • 修改后未被放到暂存区,撤销修改后就回到和版本库一模一样的状态
  • 已经被添加到暂存区,又作了修改,撤销修改就回到添加到暂存区后的状态

乱改了工作区的某个文件内容,还添加到了暂存区,想丢弃修改

git reset HEAD <file>可以以把暂存区的修改撤销掉,重新放回工作区,就回到了上面的场景,接着可以按上面场景修改

删除文件

1
2
3
4
rm rest.txt//仅删除本地文件
//如果确实要从版本库中删除文件,还需要进行一下操作
git rm test.txt
git commit -m "remove"

添加远程库

1
2
3
4
5
6
7
8
9
10
git remote add origin git@github.com:michaelliao/learngit.git
git push -u origin master

//只要本地作了提交,就可以通过命令将本地master分支的最新修改推送至GitHub
git push origin master
//master分支是主分支,需要时刻同步
//dev是开发分支,也需要时刻同步
//bug分支只用于在本地修复bug,不需要推送
//feature分支是否推送,取决于是否需要合作开发
git remote -v//查看远程库的详细信息

分支管理

创建与合并分支

git每次提交都会串成一条时间线。

主分支为master分支,指向提交

HEAD指向的就是当前分支

git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点

当我们创建新的分支,例如dev,git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上

把dev合并到master上就是直接把master指向dev的当前提交,合并完分支后,甚至可以删除dev分支

1
2
3
4
5
6
git branch//查看分支
git branch dev//创建dev分支
git switch dev 或者 git checkout dev//切换dev分支
git switch -c dev 或者 git checkout -b dev//创建+切换分支
git merge dev//合并指定分支到当前分支
git branch -d dev//删除分支

分支管理策略

Fast forward模式,在这种模式下,删除分支后,会丢掉分支信息

要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

1
git merge --no--ff -m "merge with no-ff" dev

Bug分支

git stash可以把当前工作区存储起来,使用之后查看工作区就是干净的

1
2
3
4
5
6
7
8
9
10
11
12
git checkout master//假定需要在master分支上修复bug
git checkout -b issue-101//在master创建临时分支
git add readme.txt
git commit -m "fix bug 101"
git switch master//切换到master分支并完成合并
git merge --no-ff -m "merged bug fix 101" issue-101

git switch dev
git stash list//可以查看存储地方

1.git stash apply//恢复后,stash内容并不删除,需要用git stash drop 删除
2. git stash pop//恢复的同时把stash内容也删了

Feature分支

开发一个新 feature ,最好新建一个分支

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除

多人协作

1
git remote -v//查看远程库信息

推送分支

git push origin 分支名

![1724825746017](D:\WeChat\WeChat Files\wxid_g7ywuxdz16xh22\FileStorage\Temp\1724825746017.png)

抓取分支

1
git clone ...//默认情况只能看到本地的master分支
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突

标签管理

创建标签

1
2
3
4
5
git checkout master//首先切换到需要打标签的分支
git tag v1.0
git tag -a v0.1 -,m "version 0.1 released" 1094abd//-a指定标签名,-m指定说明文字
git tag//查看所有标签(按字母排序)
git show <tagname>//查看标签信息

默认标签十大在最新提交的commit上的,如果之前的commit忘记打标签,可以找到历史提交的commit id,然后打上

1
2
git log --pretty=oneline --abbrev-commit
git tag v0.9 f52c633

操作标签

创建的标签只会存储在本地,不会自动推送到远程

1
2
3
4
5
6
git tag -d v0.1//删除标签
git push origin v1.0//如果要推送某个标签到远程
git push origin --tags//一次性推送全部尚未推送到远程的本地标签
//如果要删除远程标签
git tag -d <tagname>//先删除本地标签
git push origin :refs/tags/<tagname> //删除远程标签