最近公司代码管控比较乱,有天就运用分支进行了代码整理,当时就遇到一些困惑,抽空就把git 再学了一下。

以前我是用git指令的,可是敲指令对我来说仍是有点麻烦(主要是git 功力不够),看到有同事用git桌面版(毕竟git官方的亲儿子)我也就跟着用了,不得不说真香,不过也有些约束,。当然现在许多IDE也都支撑Git,并且也很强大,比如微软的 VSCode 对吧,引荐大家运用起来。

这篇文章拖了好久,最近整理基础时索性就把这篇完善了。

几个概念:

  • 版别库:git在本地开辟的一个存储空间,一般在 .git 文件里。

  • 作业区(workspace): 便是修正器里边的代码,咱们平常开发直接操作的便是作业区。

  • 暂存区(index/stage):暂时寄存文件的地方,git add 后也就将作业区代码放到了暂存区(缓冲区)。

  • 本地库房(Repository)git commit 后便是将暂存区的代码放到本地库房。

  • 长途库房(Remote):线上代码寄存的地方,如 github/gitee。

GIT | 日常命令查阅表

资料均来源于网络,文章主要是自己的的一些操作实践和了解。行文假如 有误还希望谈论指出,一起交流

四种状况

GIT | 日常命令查阅表


先安装个 Git (Git – Downloads)

git --version # 看看Git 当时版别
git update-git-for-windows # windows 更新

菜鸟教程有个 (图解 Git | 菜鸟教程) 感觉对某些指令的描述还挺直观的。

当然最好的文档便是官方文档 Git – Reference,有啥疑问就往这看就行~~

常用指令

<variable> 尖括号内表明变量。 [optional] 中括号内表明可选

基础指令

公钥生成

ssh-keygen -t rsa -C 'your-emial-dress' # 生成公钥
cd ~/.ssh # 切换该目录
cat id_rsa.pub # 检查公钥内容

然后在 同性结交网站github settings --> ssh 公钥处张贴即可。

git help <instruction> 检查某条指令

初始化(clone/init)

git clone <repo-url> # 克隆长途库房到本地(新建一个与线上库房同名的文件夹),仅克隆默许分支的代码,
git clone <repo-url> <directory> # 克隆长途库房到本地,指定本地文件夹名  directory
git clone -b <branch> <ropo-url> # 克隆长途库房(的指定分支branch)到本地
git init # 本地新建/初始化(假如存在)一个git库房,根目录创立 .git 文件,即版别库
git init --bare # 生成裸库,没有 .git 文件只要一些前史版别的记载文件,让源代码与版别库分离

git init 指令创立一个空的Git存储库 – 本质上是一个 .git 目录,其间包含 objectsrefs/headsrefs/tags和模板文件的子目录。还将创立一个引用master分支 HEAD 的初始 HEAD 文件

装备

--global 便是大局装备(针对一切库房)

cat .git/config # 本库房检查装备文件
cat ~/.gitconfig # 大局装备文件检查
git config --list # 检查装备列表 简写 -l
git config --global --list # 检查大局装备列表
git config [--local|--global|--system] --list # 检查 本地库房|大局|体系 装备列表
# 装备大局用户(用户名和邮箱)
git config --global user.name "用户名" 
git config --global user.email "git账号邮箱"
# 删去大局用户信息
git config --global --unset user.name
git config --global --unset user.email
# 装备指令别号,简化输入
git config --global alias.co checkout
git config --global alias.ss status
git config --global alias.cm commit
git config --global alias.br branch
git config --global alias.rg reflog
# 装备log别号,顺便一些装备,当然也能够在 git lg 后边加指令参数,如: git lg -10 显现最近10条提交
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# 上述 装备后 git log 的信息大概是: 84b2f5d - edit2 (45 minutes ago) <OFreshman>,有颜色符号
# 删去大局装备
git config --global --unset alias.xxx
git config --global --unset user.xxx
vim ~/.gitconfig # 修正装备
git config --global init.defaultBranch <branch> # 装备初始化库房的默许分支
#git init 本地初始化 master, 线上库房 新建 main 是默许

长途装备,本地库房与线上库房相关就需求装备长途

git remote add <name> <repo-url> # 装备长途链接

修正和提交

git status # 检查本地是否有更改(提交状况),作业区与暂存区
git status -vv # 检查本地的更改,顺便文件更改细节
git status -s # 检查修正的文件
git diff # 检查更改内容,(作业区和暂存区)
git diff catched # 检查更改内容,(暂存区和本地库房)
git add . # 提交一切更改一切至暂存区(当然被疏忽的文件不会被提交)
git add . -f # 被疏忽的文件也添加上
git add <file> # 只提交某个文件至暂存区,file是文件途径
git mv <new-file> <old-file> # git mv 指令用于移动或重命名一个文件、目录或软连接(条件是已add或许暂存了)
# Eg: 将demo.vue更改为 demo-change.vue
git mv src/components/demo.vue src/components/demo-change.vue
git commit -m "提交信息" # 给暂存区域生成快照并提交
git commit --all -m "提交信息" # 同等于 git add . && git commit -m, 
# 简写 git commit -am ""
# 留意 仅针对 追踪过&修正过 的文件,新增的文件是不能够的
git commit --amend # 修正最近一次提交信息,按 i 进入修正,esc 然后输入:wq 回车退出即可
git commit --amend --only # 修正最近一次提交信息; 按 i 进入修正,esc 然后输入:wq 回车退出即可
git commit --amend --only -m '提交信息修正' # 修正最近一次提交信息一步到位

git status

显现索引文件和当时HEAD提交有差异的途径,作业树和索引文件有差异的途径,以及作业树中不被Git追踪的途径(也不被gitignore[5]疏忽)。前者是你通过运行 git commit 会提交的东西;第二和第三者是你在运行 git commit 之前通过运行 git add 能够提交的东西

检查提交前史

git log # 检查一切提交前史
git log  -5 # 检查最近五条提交前史
git log --oneline # 单行检查最近提交前史 --pretty=oneline --abbrev-commit 合用的简写
git log --graph # 检查日志图,假如存在兼并时,看起来较为清晰
git log --pretty="%h, %s, %ad" # 单行检查日志,顺便时刻
git log --format="%h, %s, %ad" --date=short # 能够限制时刻格局,short只显现年月日。
git log --format="%h, %s, %ad" --date=local # 设置时刻时区,大局装备 git config --global log.date local.。
# 不习惯月日年是英文的,能够设置日期为 ISO 
git log --pretty="%h, %s, %ad" --date=iso
# 当时库房log date格局 git config log.date iso-strict-local
git log --format="%h, %s, %ad" --date=short --author="OFreshman" -3 只检查作者 OFreshman 最近三条提交

我的日志打印设置

git config --global alias.lg "log --color --graph  --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%a d) %C(bold blue)<%an>%Creset' --abbrev-commit"

以上是之前 windows 的设置, 后边我在Mac上时刻出不来(我看官网没有不支撑星期几了)应该略作修正

git config --global alias.lg "log --color --graph  --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit"

作用差不多这样

git lg -3

GIT | 日常命令查阅表

更多参阅:

git log指令全解析_碧海凌云的博客-CSDN博客_git log (自己按需装备你想要得即可)

Git/git-log|pretty_formats

iterm2 git 在检查提交前史、装备,分支等信息时,退出需求 + q

检查操作记载

git reflog # 检查一切操作记载,英文状况 按q 退出

推 / 拉代码

git fetch # 将会更新一切的长途分支
git fetch <remote-name|repo-url> <branch> # 从长途 remote-name 上拉取 branch 分支的代码
git pull # 将会兼并长途的默许分支到本地的当时分支
git pull <remote-name> <branch> # 从长途 remote-name 上拉取 branch 分支的代码并与当时分支兼并
# 相当于 git fetch + git merge <remote-name>/<branch>
git pull origin --allow-unrelated-histories  # 答应兼并不相关的前史
git push <remote-name> <branch> # 将当时分支代码 推 到长途库房
# 假如长途只要一个 主机remote-name, 则后边可省掉,如
git push
# 为推送当时分支并树立与长途上游的盯梢
git push --set-upstream origin main
# 假如有多个主机名,可通过 -u (--set-upstream-to)设置默许主机,git push时则会推送到 默许主机默许分支
git push -u <default-remote> <branch>
git push -f <remote-name> <branch> # 将当时分支代码 强推 到长途库房

丢掉(discard)作业区的改动

git restore <file>

删去文件 git rm

当有些 提交过 的文件不需求了就能够删去掉.

git rm <file-path> # 删去文件 从本地版别库中删去
git rm -f <file-path> # 强制删去文件,假如修正过且已放暂存区
git rm --cached <file-path> # 仅删去暂存区,保存作业区
git rm -r <dir-path> # 递归删去,删去dir文件下一切子文件

铲除文件 git clean

从当时目录开端,通过递归删去不受版别操控的文件来整理作业树。

一般,只会删去 Git 不知道的文件,但假如-x 指定了该选项,也会删去疏忽的文件。例如,这对于删去一切构建产品很有用。

简单来说: 删去作业区未被追踪的文件(Untracked files)

当然, 也能够通过装备 .gitignore 来让文件 不提示

git clean -f # 删去 untracked files
git clean -fd # 连 untracked 的目录也一起删掉
git clean -xfd # 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
# 在用上述 git clean 前,主张加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
git clean -f -d -i #递归删去Untracked 文件,支撑交互,引荐这种办法

对于交互式删去(加 -i ),举个比如:

GIT | 日常命令查阅表

能够看到有几个选项,1 递归删去一切;3, 数字挑选 ,能够单个数字,也能够1-3,挑选1到3(满足了就 enter 退回主菜单,挑选1铲除即可), 4 便是会询问每个删去的文件。

长途装备 git remote

git remote -v # 检查本库房连接的长途/线上库房信息
git remote add <remote-name> <repo-url> # 添加长途库房信息
git remote remove <remote-name> # 移除长途链接
git remote set-url <remote-name> <ropo-url> # 设置新的链接
git remote set-url [--push] <name> <newurl> [<oldurl>] # 修正并推送(待测验

上述办法装备会在某些操作时需求确认账号和密码,比较繁琐。 补充一下 person access token办法

settings => Developer settings => Personal access tokens(个人访问令牌) => tokens (classic) => Generate new token => 设置 token过期时刻(我主张设置成 永远 省劲, github不主张)和权限规模(主张都选上省劲)=> 点击 Generate token => 仿制令牌去修正本地库房的 remote 就行了

git remote set-url <remote-name> https://<your_token>@github.com/<USERNAME>/<REPO>.git

将<your_token>换成你自己得到的令牌。是你自己github的用户名,是你的项目名称.即可履行 pull/push 操作。

标签 git tag

这个我不常用(适合发版的时分打标签),作用基本和commit相同,意图是为了你要回滚是能够挑选便于回忆的自定义tag,而不是繁琐的 commit id.

git tag <tagname> <commit id> #为某一次提交打标签
git show [tagname] # 检查标签信息 
git tag -d [tagname] # 删去标签,标签为本地创立,所以是本地安全删去 
git push origin [tagname] # 推送某个标签(对应的提交版别)到origin长途
git push origin --tags # 推送悉数本地标签到origin长途 
git push origin :refs/tags/<tagname> # 能够删去一个origin长途标签,此刻是本地标签推送到了长途,先删去本地。 

分支管控 git branch + git checkout

分支是啥呢,分支便是分支,emm…,废话文学

指向 commit 的指针。分支名便于回忆。

git branch -v # 检查本地一切分支
git branch -r # 检查长途分支
git branch --all # 检查本地和长途分支 缩写 -
git branch <branch> # 新建分支 ①
git checkout <banch> #切换至 branch 分支 ②
git checkout <commit-id> #切换至 特定的commit ③
git checkout -b <branch> #新建分支并切换到该分支 ④ = ① + ②
# ③ 能够将过去的某个提交check出来,此刻是个游离(detached)分支,能够 git switch -c <新分支名> 或许 ④ 持续根据该提交开发
# 运用 ③ 甚至能够找到 以前删去分支上的commit(运用 git reflog,分支仅仅是个指针)
git branch -D <branch> # 删去本地分支,强制
git branch -d <branch> # 删去本地分支,会检查是否被merge --delete
git branch -m <old-branch> <new-branch> # 更改分支命名
git push <remote-name> :<remote-branch> # 删去长途分支(推一个空分支给长途test分支)
git push -d <remote-name> <branch> # 同上 -d 与 --delete同等
git push <remote-name> <local-branch>:<remote-branch> # 长途新建分支并将本地分支推送上去
#Eg: 新建origin长途分支 test,并将本地分支test 推送上去
git push origin test:test
#清空作业区一切改动(还没git add),留意只能清空文件夹的改动,不能
git checkout <file>
git checkout -- <file> # 丢掉作业区某个文件改动
git checkout -- <file> # 丢掉作业区一切改动

分支兼并 git merge

分支兼并即将两个分支的代码进行兼并,假如 a 分支要与 b 分支兼并,假如以 b 分支为主,则先切到 b 分支在兼并,

兼并前需求确保作业区没有未提交的代码

git merge <branch> # 当时分支与 branch 分支兼并
git merge --allow-unrelated-histories <branch> # 答应不相干的前史兼并,信任有朋友遇到过
git merge --ff <branch> # 默许便是此选项,即fast-faward,不会和兼并前史和兼并信息
git merge --no-ff -m 'descriptions' <branch> # 当时分支与 branch 分支兼并
# --no-ff 有兼并记载且前史中有两个分支的提交记载
git merge --ff-only <branch> # 强制运用 --ff模式兼并,不过有分叉的状况,兼并不生效
git merge --continue # 兼并有抵触了,处理抵触 add 之后运行该指令(持续兼并,会有提示)相当于 commit

代码暂存 git stash

git stash 后代码就会复原为最近一次的提交(commit)或许暂存(stash)

本质上是将作业区的代码寄存至暂存区,可是 git commit 时不会提交

git stash # 暂存作业区代码
git stash save "暂存信息" # 暂存顺便信息
git stash list # 暂存列表,从上到下,新到旧
git stash apply # 运用最新一次暂存
git stash pop # 运用最新一次暂存,和上面相同
git stash apply stash@{1} # 运用次新的暂存
git stash clear # 删去一切暂存
git stash drop # 删去最新一次暂存

代码回滚 git reset

重置当时 HEAD 到指定的状况 [官网](Git – git-reset Documentation)

文言: 回退版别,能够指定退回某一次提交的版别,也便是撤回暂存区的的提交代码(add之后)

git reset [--soft | --mixed | --hard] [HEAD]
git reset HEAD <file> # 从暂存区回退某个文件,仅git add之后的,
git reset HEAD^^ # 回退一切内容到上一版别(撤销最近一次的提交),window版别需求两个 ^,一个的话会提示 More ?
git reset --hard # 清空暂存区的代码,重置为前次一次的提交
git reset --hard HEAD^^ # 同上
# push 之前可履行上面操作, 假如 push 后,reset后,强推即可。
git reset --hard origin/<branch> # 回退到和 线上 分支branch 相同
git reset --hard <commit-id> # 回退到某个commit, git log 检查commit id
# 留意 对于 git commit 之后的代码回滚,需求指定 commitid, 且该commit之后的提交都会被重置掉。

默许参数是 –mixed , 作业区代码被保存,暂存区和本地库房被清空。

举个比如,现在顺次有 a, b, c 三个提交(c最新),我重置到 agit reset <commit-id-of-a>),那么现在修正器(作业区)的代码 仍是最新 c 的代码,可是 bc 的提交的代码此刻处于 未提交状况(git status 检查),能够挑选性的增删,然后 git add && commit 提交即可,也能够运用 git checkout -- . 丢掉掉。

留意慎重运用 –hard 参数,它会删去回退点之后的一切提交和一切没有commit的内容,并且会修正commit前史。这或许更像咱们了解的回滚,但或许不是咱们想要的回滚,咱们或许需求回滚后 保存回退点之后的代码(在作业区,git status 可检查到未提交),那么就需求 –soft

git reset --soft HEAD~2 # (柔软的)回滚到上前次提交,保存前次提交代码
git reset --soft <commit-id> # 回退到指定的提交,
# 且保存了 该提交到最新提交的代码(期间删去的文件不会在)

[HEAD] 有两种表明办法(window 上 符号好像有些问题):

  1. HEAD 当时版别, HEAD^ 上一次, HEAD^^ 上前次,….

  2. HEAD~0 当时版别, HEAD~1 上一次, HEAD~2 上前次,….

更改提交 git rebase

能够对某一段线性提交前史进行修正、删去、仿制、张贴;因此,合理运用rebase指令能够使咱们的提交前史洁净、简练!

进入修正状况: i

退出并保存:esc + : + wq

-i 参数便是支撑交互式的去操作,引荐,

# 当时 curent 分支变基至 branch 分支, current当时分支的基底是 branch 分支的最新提交
git rebase <branch> 
git rebase -i  [startpoint]  [endpoint]
# 慎重运用[endPoint] 省掉, 即默许表明从起始commit一直到最终一个,可是一旦你填写了, 则表明 [endPoint]后边的commit悉数不要了!
git rebase -i <commitId> # 兼并commitId 到当时的提交
git rebase -i HEAD~3 # 修正最近三个提交
# 将 startpoint 与 endpoint 的提交仿制(追加)到 branchName 上
git rebase  [startpoint]  [endpoint] --onto [branchName] 
# 别的还需切换到该分支(master),将其所指向的提交ID指向当时 HEAD 所指向的提交id
git checkout master
git reset --hard  0c72e64
git rebase --skip # 跳过提交
git rebase --abort # 撤销rebase,当某些重做履行到一半的时分,临时懊悔就能够履行此指令
git pull <branch> --rebase # 简化拉取代码的信息 
# 同等于 git fetch origin + git rebase <branch> 

变基

对于变基操作 git rebase <branch>(当时分支为current), 找到 current 与 branch 分支 一起的提交 a, 假如找不到 则为各自分支的第一个提交,

将 current 分支上 a到最新的一切提交 追加至 branch 分支上 a到最新的一切提交。然后将整个提交追加到a上组成的提交前史。

它和merge相同都是兼并其他分支的代码,不相同的是:merge 会发生一条新的 merge commit,且有一次抵触兼并(假如存在),rebase 则不会发生新的提交记载,且不会有 分支兼并 前史,且需求至少一次(取决于变基的当时分支有多少新的提交)的抵触(假如存在)兼并。

举个比如, local 此刻有如下提交

GIT | 日常命令查阅表

rebase-test 有如下提交

GIT | 日常命令查阅表

能够看到公共的提交 是从 955f4c5 开端的

然后在 local 上变基

git rebase rebase-test

GIT | 日常命令查阅表

然后 处理 抵触持续 rebase,此刻注释中的 pick 能够打开(去掉#),也便是说需求保存该提交。

假如你此刻懊悔了,能够用 git rebase –abort 撤销你的变基操作

git add . && git rebase --continue

接着修正提交信息,默许是 local 的最终一次提交,我改了之后然后保存.

GIT | 日常命令查阅表

GIT | 日常命令查阅表

看到本来 local上新的提交没有了,发生了一切新的 commit(commit id变了,commit注释没变,处理抵触时我改了其间一个提交信息)

GIT | 日常命令查阅表

变基成功后,local 上新的四个提交成功的根据(跟在) 了 rebase-test 的最新的提交(后), 本来是根据(跟在)一起的提交 955f4c5(后)。

更改提交前史

当输入 git rebase -i HEAD~3 后,进入修正页面,最新在下面

GIT | 日常命令查阅表

三次提交信息 前面都有pick,这里的pick是一个指令,能够改成指令集中(reword/edit/squash…)恣意指令,来履行相应的操作。

在上面图中我要更改最近一次和第三次的提交信息,退出保存后,会提示两次交互,顺次让你去更改提交信息,两次都保存好后就算完成了。

GIT | 日常命令查阅表

提交信息得到了改动

GIT | 日常命令查阅表

git rebase 处理的抵触,就用 git add . 添加至暂存区, 不能commit, 然后 git rebase --continue

rebase的几个指令解说

  • pick (p: 保存该commit

  • reword (r: 保存该commit,但仅需求修正该commit的注释

  • edit (e: 保存该commit, 但我要停下来修正该提交(不仅仅修正注释)。a->b->c 修正a提交,

    b,c 提交在rebase之后将不复存在,会被兼并。可是a提交存在(差异于后边两个指令)

  • squash (s: 将该commit兼并到前一个commit

  • fixup (f: 将该commit兼并到前一个commit,但不要保存该提交的注释信息

  • exec (e: 履行shell指令

  • drop (d: 丢掉该commit

仔细观察的话,通过 reabse -i 之后 修正的提交, commit id 都发生了变化(即使那些未修正的提交)。

假如有这样的状况,同事在master(现在有 a, b, c三个提交, c是最新)切了一个 feature 分支,然后我在 master 分支改了a提交 (rebase 办法),那么a,b,c的commit-id 就变了, 同事这会开发完了新功能,我就将 feature 分支兼并到master,commit id 不同就会将 feeature 分支的 a,b,c处理为新的提交。

成果就会有 三个重复的提交:

a (master,修正的), b(master),c(master),a(feature),b(feature),c (feature)

这可不是我想要的,所以牢记

只对没有推送或未共享给别人的本地修正履行变基操作整理前史, 从不对已推送至别处的提交履行变基操作

关于rebase,限于篇幅没有把我实践的一切状况列出来,假如需求了解的更全面一些,这里有一些参阅:

【git 整理提交】git rebase -i 指令详解_the_power的博客-CSDN博客_git rebase-i git rebase详解(图解+最简单示例,一次就懂)_风中一匹狼v的博客-CSDN博客_git rebase

git rebase的两种用法(最全)_小垚尧的博客-CSDN博客_git rebase

回退代码 git revert

将现在的提交回滚至指定提交,并生成一条提交记载

git revert HEAD # 回退最终一次提交
git revert --no-commit HEAD~3..HEAD # 回退至倒数第三个提交并坚持未commit的状况
git revert <commit-id> # 回退至某一次提交
git revert <commit-id>..<commit-d> # 回退多个提交

举个比如:我要回退最新的提交,现在有四条提交前史

GIT | 日常命令查阅表

履行 git revert HEAD, 进入 vi 界面, 默许提交信息是 Revert "three"(假如修正 按 i 修正,然后esc退出),然后 :wq 退出保存,再次检查前史

GIT | 日常命令查阅表

能够看到多了一条新的 commit, 此刻作业区的代码即为 上前次(24be709)提交的代码!

回退多个提交:

GIT | 日常命令查阅表

在回退的两条注释后边我追加了 commit。作业区代码为最近第三次提交的代码!

GIT | 日常命令查阅表

假如有抵触就需求兼并,兼并完持续 就 git revert --continue, 直至一切提交都回退完

再举个比如:回退本来的某一次过错提交

摘取提交 git cherry pick

给定一个或多个现有提交,运用每个提交引进的更改,为每个提交记载一个新的提交。这需求您的作业树清洁(没有从头提交的修正)。

git cherry-pick <commit-id> # 摘取某个提交
git cherry-pick <commit-id1> <commit-id2> # 摘取多个提交,非接连
git cherry-pick <commit-id1>^..<commit-id2> # 摘取多个提交,接连
git cherry-pick --abort # 撤销
git cherry-pick --quit # 推出

将已经提交的 commit,仿制出新的 commit 运用到当时分支里,文件的增删都会更新,发生抵触时, cherry-pick 的提交回作为 incoming change,在vscode里操作很便利。

举个比如,这里有三个提交。

GIT | 日常命令查阅表

摘取最近第三次提交(e20d261

GIT | 日常命令查阅表

成果便是添加了一次提交(fa68143e20d261 的兼并)

GIT | 日常命令查阅表

别的留意:最终的commit中, pick commitlast commit 添加的文件会存在,删去的文件不会存在!相当于 <last commit> merge <pick commit>


.gitignore文件

这个文件操控着 Git 对哪些文件疏忽

.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

一些场景

从0-1

本地库房怎样和线上库房做相关呢?分以下几种状况

  • 线上本地都没有(①)
  1. 本地新起一个项目 app,

  2. 线上库房新建一个(主张同名)同名项目 app。

  3. 本地装备长途相关的url(参阅 git remote), 然后 git push -f 强推。

  • 线上有了,本地没有(②)

参阅 ① 步骤2,3

  • 本地没有线上有(③)

    克隆到本地即可(参阅 git clone )

  • 线上和本地都有,只是没相关起来(④)

    本地装备长途相关的url(参阅 git remote),再 pull(fetch + merge) 下来即可(别的假如有抵触需求处理掉), 需求推的时分树立 相关 git push --set-upstream <remote-name> <remmote branch>

丢掉作业区的更改

现在我修正器(作业区)写了一些代码,可是我不想要了,此刻没有提交到(git add),name直接丢掉掉就好了

git checkout -- <file>
#Eg: 丢掉 文件 demo-change.vue的更改
git checkout -- src/components/demo-change.vue

提交信息错了,我想改

参阅 git rebase

或许 git commit --amend 修正最终一次提交

更改提交次序 场景在哪??

仍是 git rebase.

小技巧:非(vi/i)模式,dd 剪切(光标),p张贴,张贴至光标的下一行

兼并屡次提交,使提交记载更洁净

git rebase 结合指令 squash

删去 git 库房

find . -name ".git" | xargs rm -Rf
# 或许直接删去 .git 目录
rm -rf .git

参阅

Git – Reference

Git速查手册(第三版) | AnSwEr’s Blog