0
点赞
收藏
分享

微信扫一扫

自己整理的常用git指令集中

外贸达人小峻先森 2022-03-24 阅读 62
git

常用git指令

提醒:{

  1. 下文所有< >只是包含变量名的括号,实际使用时不应存在
  2. 所有git命令都可使用--help后缀获得相关提示,如git merge --help
  3. 手上过一遍最好

}

一、git的介绍{

git是程序员常用的控制代码增量,进行版本控制,进行团队协作的程序(是linux的“内向”作者写的)。以git为基础有很多常用的git网站如github或者gitee这样的远程网络仓库

}

二、git的四个区{

    工作区:就是电脑你放项目的文件夹

    缓存区:文件经过add之后进去缓存区

本地库:commit后进入的地方(毕竟不联网时也要工作)

远程库:github或者gitee上的库

}

三、创建库{

终端中进入相应位置,输入git init ,这样就能创建一个Git仓库,同时会生成.git这样一个隐藏文件(一般不显示),把这个.git文件(或者整个项目文件夹)删除可以清除这个库

}

四、分支{

1.master分支:当在空白库内进行第一次commit的时候,会创建一个默认的master分支

2.分支的创建和切换:{

git branch  获取“本地库”所有分支的名称并显示现在所在的分支

git branch -a 获取“本地库和远程库”所有分支的名称并显示现在所在的分支

git branch  <name>  创建一个带名称的分支

git branch -d  <name>   删除分支,该命令有使用条件,用在分支合并之后删除多余分支的情况

git branch -D  <name>  强制删除分支,适合于删除还没有合并过的分支

git checkout  <name>  跳转到name分支

git checkout -b <name> 创建并进入某个带名称的分支

git switch  <name>   跳转分支,因为 git checkout本身功能太多且不符合语义化,所以后续版本创建了这个指令

git switch -c  <name>  创建并进入新分支,作用相当于git checkout -b <name>

}

3.分支的一些注意事项:{

命令都是基于本分支而执行的,git commit,git add,git log等命令是基于分支,你在哪个分支,你提交的就是哪个分支

当在master分支创建并转入新分支的时候,新分支就是基于master而创立的,新分支相当于保留的是基于master分支逻辑而新增加的带代码,当你git log的时候当然也会出现master分支曾经的提交记录

}

}

五、关于缓存区和本地库的一些指令{

git add  <filename>   可以将对应文件放入缓存区

git add .  该指令表示将所有的更改放入缓存

git commit -m “string”    将缓存区的所有修改提交到本地库中,并留下提交信息string(双引号),这个指令会留下commit记录(使用git log查看)

git commit -am string  add和commit指令的合体,一步到位(但是貌似在一个分支第一次提交的时候不能使用该指令,至少master分支是这样的)

git status -s  获取本分支内文件改动的具体情况(如有没有commit,有没有add),当然直接写git status 也可以,这个-s表示简略版本,也就是显示的格式上会紧凑一些。

git log 获取本分支的所有commit记录,当然光使用这个指令,显示出来的信息会非常多,所以就有了以下的后缀写法:{

git log --pretty=oneline 这个指令规定所有的提交记录都会在一行内显示,这样的话画面简洁一点

git log --graph 这个指令会以连线的方式让你看清楚提交分支之间的逻辑,当然相似的后缀还有很多,目前我就只看到这些

git log查看commit记录,如果有很多的话,可以按↓方向键,如果要退出的话,可以按q

}

}

六、提交记录的回退{

有些时候一不小心提交(指commit)错了,就想撤销一下操作,因此就需要git的相关回退功能,所以我们要熟悉以下的几个指令

1.第一种回退git reset --hard HEAD~1{

我们来分解一下这个指令

reset 重新设置,这里就是回退

--hard代表hard模式,也就是不保存你在回退前的修改

HEAD是提交指针,指向你在分支内部的最后一次提交的记录~1表示向前回退一次,当然你也可以~n去回退多次

}

2.git reset的一些注意点{

git reset --hard <提交记录代码>也可以实现回退,这个提交记录代码就是你git log

的时候看到的那一堆数字和字母的乱码,如:asd3as7dsad8762sad.....。实际上你只需要复制前面几位就可以了,会自动识别(当然具体是几位我没试验过,不过至少得复制个5/6位吧)

git reset --hard HEAD^ 可以实现提交的回退,想回退几次,就添加几个^,当然这个指令不适合cmd终端控制

git reset会销毁提交记录,比如我在第六次提交的时候发现了错误,想退回第四次提交,那么第五、六次的提交记录都会被销毁,也就是git log之后发现没了

}

3.第二种回退方式 git revert{

直接说一下上述两种方法的异同

git revert  <提交记录代码>、git revert HEAD~1和git revert HEAD^都可以实现commit记录的回退,也就是说回退的方法和git reset一样

git revert 不消除commit记录,也就是说比如我在第六次提交的时候发现了错误,想退回第四次提交,第五、六次的提交记录都还在,git log都可以查到而不会像git reset一样被消除掉

git revert HEAD~1实际上(按照的我的实践)会回退两个版本,也就是说git revert HEAD~n实际上会回退commit记录的n+1的版本

}

4.单个文件的回退git checkout -- readme.txt {

将 “工作区” readme文件撤回到最近一次add或者commit时候的状态,只是修改单个文件,注意文件名和短横线之间有空格,使用的场景是在add或者commit之后,修改了一些,然后单个文件想进行版本回退

}

}

七、分支合并{

1.第一种合并方式git merge <分支name> {

所谓的快速合并,也就是把你所在的分支和要合并的分支进行合并(注意这个逻辑),合并之后分支还会存在,因此需要删除多余分支

如果被合并的两个分支有相冲突的地方,比如对同一个文件进行了不一样的修改,那么我们需要手动去处理分歧,之后进行add和提交

注意merge之后会将dev分支的提交记录塞进主分支之中(被合并的分支记录,塞进所在分支之内),具体逻辑如下

合并之前:

                dev(这个表示在master2提交为蓝本创建dev)----dev1

master1----master2-----master3

合并之后会变成:

master1----master2----dev1-----dev2-----master3,所以在master分支进行版本回退的时候,可能会推到dev2的版本

}

2.第一种合并方式的改进版本{

git merge --no-ff -m string <分支name>

非快速模式的合并,git merge name的全写实际上是git merge --ff也就是快速模式,使用原生merge合并的时候,dev分支的commit记录会被强行安在master分支之上,若对master分支进行版本回退,可能会回退到dev分支的记录,而--no-ff方法合并之后,dev分支的记录会被完全无视(虽然存在),master分支的回退会回到master分支最近一次提交的commit,图示如下:

合并之前:

                dev(这个表示在master2提交为蓝本创建dev)----dev1

master1----master2-----master3

合并之后会变成:

master1----master2----(dev1-----dev2)-----master3,这个括号表示存在但是隐藏起来了,此时对master分支进行版本回退会直接跳过dev指向master2

}

3.git merge的一些后缀{

默认的git merge实际上是git merge -ff,ff指的是fast forward快速合并,具体结构如上

另外一个后缀就是--no-ff,明显是禁止快速合并。最后一个后缀是--if-only:只会按照 Fast-forward 模式进行合并,如果不符合条件(并非当前分支的直接后代),则会拒绝合并请求并且退出

}

4.第二种分支合并方式git rebase{
我不是太推荐这种方式,具体的方法我这里不写,需要的同学可以去网上查找,但是我这里介绍一下git rebase 在整理提交记录时候的作用

git rebase -i HEAD~2{

想象一下,你的同事是一个写两句就喜欢commit一次的人,你和他合并之后git log发现整个的提交记录长的不行,这时候就需要将提交记录进行整理

git rebase -i HEAD~n

该命名表示将本分支的最近两次提交记录合并,此时会出现一个vim视图(教学链接https://blog.csdn.net/qq_45714272/article/details/106497411),vim不是cmd,有自己的操作方式,需要的可以百度,在这个分支中,你需要选择保留哪一个提交记录并对提交信息进行修改

}

}

八、关于存档{

假设场景:{

当前任务没有提交commit,但是需要切换到另一个分支去处理问题,此时可以使用 git stash命令将当前分支的工作区缓存起来(相当于存档),这样的话就能进入其他分支(注意更改没有commit的时候是不能切换分支的)

}

  1. git stash 将目前改动缓存
  2. git stash list 可以获得你的stash存档记录,当多次存档的时候,会创建多条记录,从而形成一个list
  3. git stash apply stash@{n}  这个指令表示回复最近一次的保存(当然这个命令也是基于分支的,使用前要先切换到相应分支),中间的n是index可以改变,但是这个命令不会删除stash记录
  4. git stash drop stash@{n}  删除对应的存档记录
  5. git stash pop stash@{n}  恢复到相应的记录并删除存档记录,apply+drop=pop

}

九、git cherry-pick  <提交记录代码>{

使用场景:这个命令用于将其他分支的commit记录复制给本分支(比如我基于master创建了一个dev分支,开发时发现master分支存在bug,我基于master分支创建了bugfix分支,提交记录为x,然后将bugfix分支合并。但是我的dev分支是基于master创建的,肯定还是有相同的bug,因此我需要把原先bugfix的提交记录x复制给dev,这样的话就不需要我在dev分支手动改bug)

}

  

十、远程分支的一些指令{

git remote add <远程仓库别名>  <远程仓库地址>

添加远程库并给远程库指定别名

git remote -v 查看联系了几个git远程仓库,当然也显示这些仓库的别名

git remote rename <old name> <new name> 更改远程仓库的别名

git remote rm <远程仓库名> 删除本地库和某个远程仓库的练习

git clone <gitaddress>

指令用于第一次下载远程库的内容,但不是全部下载远程库,而是下载远程库中master分支的内容,当然也可以使用 git clone -b <branch name><git address>拉取远程仓库指定分支下的代码

git clone可以在不git init的情况下执行,实际上也没必要在git init的情况下执行

git checkout -b <branch name>  origin/<branch name>

根据远程仓库的分支创建并进入相应的分支,这一命令会在分支两个分支之间创造联系

git push  <远程仓库名>  <本地分支名>:{

以上是push命令的完全体写法,实际上我们经常使用的是git push这个简写命令,表示将目前所在分支的变更提交到首选远程仓库(origin,下面会讨论什么是origin仓库)对应的分支上

git push <远程仓库名>,该命令表示将目前所在的分支提交到对应远程仓库的对应分支

git push -u <远程仓库名> <远程分支名>,如git push -u origin master该命令表示将目前所在分支提交到origin的master分支上,并在两个分支之间建立联系,关键是这个-u,u代表upstream,如果远程仓库没有该分支,则会建立一个对应分支,-u只在第一次建立联系时使用,因为已经建立了联系,就没有必要再-u

git push  <远程仓库名> --delete  <远程分支名> 删除远程仓库的远程分支

}

git branch --set-upstream-to=origin/<branch name>{

这个命令用于将现在所在分支和远程的对应分支之间创建联系,和上面的git push -u有些相似,但是一定要注意,这个命令只能在两个已存在的分支上建立联系,一般来讲用于分支联系的切换,比如本地的master分支本来和origin的master存在联系,现在我要将本地master和origin1远程库的“已存在”的dev建立联系,就可以使用这个指令

}

git pull的相关指令{

1.情境假设:假如你和同事都需要和远程的dev分支进行合并,但是他在你之前合并,这就导致了现在的dev分支和你的dev分支除了你写的代码之外,还差了一个同事的代码,这就不好push了,此时就需要你先把远程的dev下下来,和你的本地分支进行合并,然后再上传,就需要用到git pull指令(当然你也可以使用 git push -force的写法强行上传,但是这样会把同时代码抹掉)

git pull=git fetch+git merge,git fetch相当于只下载不合并

git pull <远程库名> <远程库分支名>,这是完整写法,对应git push,我们也有简写

git pull 将现在所在分支和“默认”远程库对应分支进行合并

git pull origin master --allow-unrelated-histories,重点是后面的后缀,允许两个没有事先建立的分支进行合并

git pull --no-ff 因为git pull涉及到git merge命令,所以这边的后缀前缀和前面的git merge一样,可以在前面的git merge选项中查看,具体的后缀当然还包括--rebase

}

什么是默认远程库origin{

一个本地库可以对应多个远程库,哪个远程库的别名是origin,哪个就是默认远程,如执行git push 的时候会默认推动到origin的相应远程分支,当然如果你的本地库只和一个远程库如gitTest连接,那么此时虽然其名字不是origin,但gitTest依旧是默认远程库

}

}

格式有点乱,关键是要手上过一遍。

举报

相关推荐

整理一些 git 的常用指令

Git常用的指令

#git常用指令

常用git 指令

0 条评论