2023-10-12
git
00
请注意,本文编写于 416 天前,最后修改于 416 天前,其中某些信息可能已经过时。

目录

引言:
添加和提交修改:
回退:
撤销修改:
删除文件:
分支的理解:
解决冲突:
分支策略:
Bug分支与恢复现场
强制删除分支:
多人协作:

引言:

1.安装Git的步骤省略,安装完毕后,在终端输入$ git,下方输出git的提示信息,则安装成功;

2.本地新建目录,cd 进入该目录,执行 $ git init ,则表示将该目录初始化为一个git版本仓库(repository)

(如果直接使用$ git clone命令复制远程仓库到本地,则不用初始化,默认复制的目录就是一个git仓库)

3.此时执行$ git branch,可以查看该仓库的分支,默认只有一个master主分支;

4.Git与SVN的区别除了是分布式管理之外,Git还有工作区和暂存区(stage)的概念。

cd 进入仓库,$ls -a命令查看仓库下所有文件,工作区就是正常repository中能看到的需要编辑的文件,除此之外,还有一个隐藏文件夹.git,它不属于工作区,而是Git的版本库。

.git中存放了很多东西,其中有一个index文件夹,这就是.git的暂存区; 另外还有一个HEAD指针文件,默认指向Git为我们自动创建的第一个分支master。

image.png

添加和提交修改:

1、首先,在工作区可以添加、编辑、删除文件;

2、然后可以使用$ git add <filename>命令将工作区的某个文件的修改添加到暂存区 ,可以多次add多个文件;也可以使用$ git add .命令,一次将所有修改都添加到暂存区。

3、添加到暂存区之后,使用$ git commit -m "message"命令,将添加到暂存区的修改提交到 当前分支;commit命令实际是把暂存区的所有内容提交到当前分支。

回退:

1、提交修改到当前分支后,可以使用$ git log命令显示从最近到最远的提交日志

2、或者使用$ git log --pretty=oneline ,显示简化信息后的提交日志(只显示commit ID 和commit message)

3、在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写成HEAD~100。如果想要舍弃本次修改,回退到上一个版本,可以使用$ git reset —hard HEAD^ 命令;同理,想要回退到往上100个版本,可以使用$ git reset —hard HEAD~100

4、假如你回退了版本之后,又想要恢复到最新版本,可以使用$ git reflog,查看你的每一次命令,找到想回退的版本号

5、然后使用$ git reset --hard <commit_id>,来回退到你想要的版本上。

撤销修改:

1、场景1:当你改乱了工作区某个文件的内容(还没有add到暂存区),想直接丢弃工作区的修改时,用命令git checkout -- file

2、场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时(已执行add操作),想丢弃修改,分两步,第一步用命令git reset HEAD <file>把暂存区的修改撤销掉,重新放回工作区,就回到了场景1;第二步按场景1操作。

3、场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考上一节回退,不过前提是没有推送到远程库

删除文件:

1、先手动删除文件,然后使用$ git rm <filename>(和git add file效果是一样的),然后再使用$ git commit -m "message"命令提交删除的修改

2、另一种情况是工作区文件删错了,但是因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本,使用命令:$ git checkout -- file

分支的理解:

1、每次使用commit命令提交,Git都把这些提交串成一条时间线,这条时间线就是一个分支,Git里有一个主分支master。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

image.png 2、使用$ git branch dev 命令创建一个dev分支。

3、git checkout dev 命令切换到dev分支(两条命令可合成为一条:git checkout -b dev); 此时,切换到dev分支,表示HEAD指向了dev分支

image.png

4、可以使用 $ git branch命令,查看当前仓库的所有分支

5、在master分支下执行 $ git merge dev 命令,表示合并dev分支到当前master分支(快速合并,其实就是直接把master指向dev的当前提交)

6、使用$ git branch -d dev命令,可以删除dev分支

解决冲突:

1、从master分支新建一个分支feature1并切换到该分支($ git checkout -b feature1),假如在feature1分支上修改文件1并提交,又在master分支修改文件1并提交,此时分支情况如下:

image.png

2、再在master上执行$ git merge feature1命令快速合并时,提示文件1存在冲突;当Git无法自动合并分支时,就必须首先解决冲突(解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交)。解决冲突后,合并完成,如下图。

image.png

3、用git log --graph命令可以看到分支合并图

分支策略:

1、要强制禁用快速合并Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息,命令:git merge --no-ff -m "merge with no-ff" dev

--no-ff参数,表示禁用Fast forward

本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

Bug分支与恢复现场

1、当手头工作没有完成时,先把工作现场git stash一下,然后新建分支去修复bug;修复后,切换回到原来的分支,可以用git stash list查看stash的现场,再$ git stash pop(顺便删除了保存的工作现场),回到工作现场;如果不想删除保存的工作现场,可以用$ git stash apply命令。

强制删除分支:

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

2、Feature分支上已经有了修改,但是还没有merge,此时删除feature分支,会有提示

3、如果确定要丢弃一个已经commit但是还没有被合并过的分支,可以通过$ git branch -D feature命令强行删除。

多人协作:

1、当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

使用 git remotegit remote -v查看远程库的信息和详细信息

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:李佳玮

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!