0%

git使用

Git

前言

​ git是一个开源的分布式版本控制系统,它能帮助你管理不同的版本,并且随时退回到任意时刻,而且也可以协同开发。之前也学过一点git,不过那阵用不到git,而且学的也比较琐碎难以理解,现在在我有一定基础的情况下,重新学习git,写下这份博客用以记录学习内容。Git指令繁多,但是常用的就十几条,下述介绍的指令掌握了足以应对常规使用,新的指令也会慢慢学习记录。

基本使用

初始化一个仓库

1
git init

将当前目录变成Git可以管理的仓库,当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的。

提交

先将文件加入暂存区

1
git add <filename>

可以使用

1
git add .

将所有文件都加入暂存区

然后,把文件提交到仓库

1
git commit -m <message>

在此过程中,为了时刻掌握仓库状态,可以使用

1
git status

也可以查看提交日志

1
2
git log
或 git log --all --graph --decorate (更好的显示)

如果一次add后还没来得及commit,此时后悔了,则可以把文件从暂存区撤下,但是文件内容还是更改之后的形式

1
git reset <filename>

文件状态

8PqITU.png

文件一共有四种状态

untracked:表示新建立的文件,之前没有被commit过

unmodified:表示仓库文件,文件被commit后的状态

modified:文件被更改之后,内容有了变更的状态

staged:暂存区文件,等待commit一起提交

工作区和版本库

图示的很明晰

8PvOZq.png

8PvzJU.png

回退

当commit提交到仓库的时候,想回到上一个版本就可以使用

1
git reset <commitID>

这里commitID是commit每个操作的hash值,也有另一种表示方式

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

1
git reset --hard HEAD^

表示返回上一个版本,–hard是一个参数

现在来说明reset的参数:

–hard:不保留所有变更

–soft:保留变更且变更内容处于staged

–mixed:保留变更且变更内容处于modified

(不带参数,默认就是mixed)

Git提供了一个命令,用来记录你的每一次命令

1
git reflog

分支

1
2
git checkout -b <name><template>
或者 git switch -c <name>

该命令用于新建一个分支,name是新建分支的名称,template为模板分支,如果不填,则以现在分支为模板

1
git branch

用于显示所有的分支,当前分支前面会标一个*号。

1
git checkout <branchName>

用于切换分支

1
git branch -d <branchName>

用于删除分支

合并

合并分支变更

1
git merge <branchName>

合并有很多方式,具体内容使用可知

解决冲突

当两个分支都做了修改,现在要将其合并一起,就会产生冲突,必须手动解决冲突后再提交

git status也可以告诉我们冲突的文件

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容

远程仓库

将远程仓库下载到本地,远程仓库的默认名称是origin

1
git clone <Clone with SSH >

要查看远程库的信息,用

1
git remote

或者,显示更详细的信息:

1
git remote -v

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

可以在本地自建分支

1
git checkout -b <branchName>

然后将分支上传到远程仓库

第一次上传会没有上流分支而失败,所以使用

1
git push --set-upstream origin <branchName>

之后就可用git push上传更改到上流分支

协同开发

当多人对一个远程仓库开发时,都会在本地新建一个分支并在远程仓库上传分支,此时远程仓库是不断更新的,因为有多人不同时git push

想要获得此时远程仓库的状态,可使用

1
git fetch

如果此时发现有人在远程仓库新建了一个分支,而这个分支是本地没有的,则可以使用

1
git checkout <branchName>

切换并下载该分支

如果发现你的本地仓库比远程仓库老旧,需要更新,可以使用

1
git pull

注意:如果你在git push时发现远程仓库是最新版,即别人git push了,而你的更改是对上一版的更改,此时就会产生冲突,你可以git pull将最新版下载下来,手动在本地解决冲突,然后再git push

变基

实际应用中,或许存在这种情况,当你使用的分支源于某个模板分支,你已经在自己分支上进行过commit了,发现模板分支有被commit更新过,这个时候你想要将自己分支源于旧模板分支的base更新为新base,并且你提交在自己分支的commit要在新base之后,此时,你就可以用到

1
git rebase <BaseBranchName>

示例:

8kLsdx.png

若此时在bc分支进行git rebase master会出现冲突,此时解决冲突后,git add .将变更存入暂存区,使用

git rebase --continue继续下一个节点的rebase,以上操作直到变基完成,

参考

https://www.bilibili.com/video/av94549514

https://www.liaoxuefeng.com/wiki/896043488029600