共计 13287 个字符,预计需要花费 34 分钟才能阅读完成。
最近公司代码管控比拟乱,有天就利用分支进行了代码梳理,过后就遇到一些困惑,抽空就把git
再学了一下。
以前我是用
git
命令的,然而敲命令对我来说还是有点麻烦(次要是 git 功力不够),看到有共事用 git 桌面版(毕竟 git 官网的亲儿子)我也就跟着用了,不得不说真香,不过也有些限度,。当然当初很多 IDE 也都反对 Git, 并且也很弱小,比方微软的 VSCode 对吧, 举荐大家应用起来。这篇文章拖了很久,最近整顿根底时索性就把这篇欠缺了。
几个概念:
- 版本库:git 在本地开拓的一个存储空间,个别在 .git 文件里。
- 工作区(workspace):就是编辑器外面的代码,咱们平时开发间接操作的就是工作区。
- 暂存区(index/stage):临时寄存文件的中央,
git add
后也就将工作区代码放到了暂存区(缓冲区)。 - 本地仓库(Repository):
git commit
后就是将暂存区的代码放到本地仓库。 - 近程仓库(Remote):线上代码寄存的中央,如 github/gitee。
材料均来源于网络,文章次要是本人的的一些操作实际和了解。行文如果 有误还心愿评论指出,独特交换🤝🤝🤝
四种状态
先装置个 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
目录,其中蕴含 objects
、refs/heads
、refs/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]](https://git-scm.com/docs/gitignore/zh_HANS-CN) 疏忽)。前者是你通过运行
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 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
),举个例子:
能够看到有几个选项,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> 换成你本人失去的令牌。<USERNAME> 是你本人 github 的用户名,<REPO> 是你的项目名称. 即可执行 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
到指定的状态 官网)文言:回退版本,能够指定退回某一次提交的版本,也就是撤回暂存区的的提交代码(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 最新),我重置到 a(git reset <commit-id-of-a>
),那么当初编辑器(工作区)的代码 还是最新 c 的代码,然而 b,c 的提交的代码此时处于 未提交状态(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 上 ^
符号如同有些问题):
HEAD
以后版本,HEAD^
上一次,HEAD^^
上上次,….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
此时有如下提交
rebase-test
有如下提交
能够看到公共的提交 是从 955f4c5
开始的
而后在 local
上变基
git rebase rebase-test
而后 解决 抵触持续 rebase,此时正文中的 pick 能够关上(去掉 #),也就是说须要保留该提交。
如果你此时悔恨了,能够用 git rebase –abort 勾销你的变基操作
git add . && git rebase --continue
接着批改提交信息,默认是 local
的最初一次提交,我改了之后而后保留.
看到原来 local
上新的提交没有了,产生了所有新的 commit(commit id
变了,commit 正文没变,解决抵触时我改了其中一个提交信息)
变基胜利后,local
上新的四个提交胜利的基于(跟在)了 rebase-test
的最新的提交(后),原来是基于(跟在)独特的提交 955f4c5
(后)。
更改提交历史
当输出 git rebase -i HEAD~3
后,进入编辑页面,最新在上面
三次提交信息 后面都有 pick,这里的 pick 是一个命令,能够改成命令集中(reword/edit/squash…)任意命令, 来执行相应的操作。
在下面图中我要更改最近一次和第三次的提交信息,退出保留后,会提醒两次交互,顺次让你去更改提交信息,两次都保留好后就算实现了。
提交信息失去了扭转
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 revert HEAD
, 进入 vi 界面,默认提交信息是 Revert "three"
(如果批改 按 i 编辑,而后 esc 退出),而后 :wq
退出保留,再次查看历史
能够看到多了一条新的 commit, 此时工作区的代码即为 上上次(24be709
)提交的代码!
回退多个提交:
在回退的两条正文前面我追加了 commit。工作区代码为最近第三次提交的代码!
如果有抵触就须要合并,合并完持续 就 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 里操作很不便。
举个例子,这里有三个提交。
摘取最近第三次提交(e20d261
)
后果就是减少了一次提交(fa68143
和 e20d261
的合并)
另外留神:最初的 commit 中,pick commit
与 last 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
本地仓库怎么和线上仓库做关联呢? 分以下几种状况
- 线上本地都没有(①)
- 本地新起一个我的项目 app,
- 线上仓库新建一个(倡议同名)同名我的项目 app。
- 本地配置近程关联的 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