Skip to content
索引

常用

查看与删除代理

sh
# 查看全局http代理
git config --global http.proxy
# 查看全局https代理
git config --global https.proxy
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
# clash for windows设置代理,访问github
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
# 查看全局http代理
git config --global http.proxy
# 查看全局https代理
git config --global https.proxy
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
# clash for windows设置代理,访问github
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

已提交文件,在.gitignore中再加入,忽略无效

如果你已经提交了文件,并且想要将它们添加到.gitignore中,以后不再跟踪这些文件,遗憾的是.gitignore不会对已经被Git跟踪的文件生效。.gitignore主要用于防止将未跟踪的文件加入版本控制系统。

如果你想停止跟踪这些已提交的文件,你可以使用git rm --cached命令。这会将文件从暂存区移除,但会保留在你的工作目录中。然后,你可以将.gitignore文件更新为包含这些文件的规则,以防止将它们重新添加到版本控制中。

以下是具体步骤:

  1. 从暂存区移除文件(保留在工作目录中):

    sh
    git rm --cached file_to_ignore
    
    git rm --cached file_to_ignore
    

    替换 file_to_ignore 为你想要停止跟踪的文件名。

  2. 更新 .gitignore 文件,以便将这些文件加入到忽略规则中。

  3. 提交这些变更:

    sh
    git add .gitignore
    git commit -m "Stop tracking files and update .gitignore"
    
    git add .gitignore
    git commit -m "Stop tracking files and update .gitignore"
    

这样做后,这些文件就不再被Git跟踪,并且在将来的提交中也不会再被包含。然而,它们仍然会留在你的工作目录中。如果你想要完全删除这些文件,可以手动将它们从工作目录中删除,然后提交这些变更。

删除node_modules跟踪

sh
git rm --cached node_modules
git rm --cached node_modules

node_modules 目录中包含子目录或文件,运行上方命令会出现 not removing 'node_modules' recursively without -r错误。为了递归地删除目录,你应该使用 -r(或 --recursive)选项

sh
git rm -r --cached node_modules
git rm -r --cached node_modules

删除dist文件夹跟踪

sh
git rm -r --cached dist
git rm -r --cached dist

放弃本地所有的更改并使用远程的内容覆盖本地的

sh
git fetch origin
git reset --hard origin/master
git fetch origin
git reset --hard origin/master

这两个命令的作用是:

  1. git fetch origin: 从远程仓库(通常是"origin")获取最新的更改,但不合并到本地工作区。
  2. git reset --hard origin/master: 将本地的分支重置为与远程分支一致。这里假设你想要将本地分支重置为远程仓库的"master"分支。如果你使用的是其他分支,需要相应地替换 "master"。

注意:这个操作是不可逆的,会丢失本地未提交的所有更改。确保在执行这些命令之前,你不再需要本地的任何更改。

如果你只是想丢弃某个文件的本地更改而不是整个工作区,你可以使用以下命令:

sh
git checkout -- filename
git checkout -- filename

替换 "filename" 为你想要丢弃更改的文件名。这会将该文件恢复为最后一次提交时的状态。

克隆远程仓库项目

在使用 git clone 命令时,Git 会自动为你执行 git initgit remote add origin 的步骤,并拉取远程仓库的默认分支,创建同名的本地分支。

当你执行 git clone 命令时,Git 会在本地目录中生成一个名为.git的隐藏文件夹,该文件夹包含了仓库的所有 Git 相关信息,包括配置、对象数据库、引用等等。这个文件夹是Git仓库的核心,并且它是隐藏的,所以在默认情况下在文件浏览器或ls命令中是不可见的。

在这个.git文件夹中,有一些重要的子文件夹和文件,例如:

  • branches: 存储引用(分支)的目录。
  • objects: 存储所有数据的目录,包括文件内容、目录结构等。
  • refs: 存储指向对象的引用,比如分支、标签等。
  • config: 存储仓库的配置信息。
  • HEAD: 包含指向当前所在分支的引用。

这个文件夹及其内容是Git仓库的核心,它包含了Git的所有信息,使得你可以对仓库进行版本控制和跟踪更改。一般来说,你不需要直接修改.git文件夹中的内容,除非你非常了解Git的内部工作原理,并且知道你在做什么。通常情况下,你只需要通过Git命令来与仓库进行交互。

sh
# 根据远程仓库地址将项目克隆到本地,会生成隐藏的.git文件,该文件存储仓库的git相关信息
git clone https://git-repo-address.git   

# 等价于
git init
git remote add origin https://git-repo-address.git    
# 拉取远程仓库默认分支并且本地生成同名分支
git pull origin <default-branchname>  

# 克隆远程仓库指定分支
git clone -b <branchname> https://git-repo-address.git  
# 根据远程仓库地址将项目克隆到本地,会生成隐藏的.git文件,该文件存储仓库的git相关信息
git clone https://git-repo-address.git   

# 等价于
git init
git remote add origin https://git-repo-address.git    
# 拉取远程仓库默认分支并且本地生成同名分支
git pull origin <default-branchname>  

# 克隆远程仓库指定分支
git clone -b <branchname> https://git-repo-address.git  

查看修改本地用户名和邮箱

sh
# 查看
git config user.name
git config user.email

# 修改
git config --global user.name "git-userName"
git config --global user.email "git-email"
# 查看
git config user.name
git config user.email

# 修改
git config --global user.name "git-userName"
git config --global user.email "git-email"

暂存所有修改

开发时遇到这样的情况,先停止手上未完成的开发,去解决bug

暂存

使用git stash会把所有未提交的代码修改(包括暂存的和非暂存的)都保存起来,就会恢复当前分支的最新commit提交

改完bug,再恢复保存的代码,继续开发工作

实际应用中推荐给每个stash加一个message,用于记录版本,使用git stash save取代git stash命令。示例如下:

sh
git stash save "test-cmd-stash"
Saved working directory and index state On autoswitch: test-cmd-stash
HEAD 现在位于 296e8d4 remove unnecessary postion reset in onResume function
git stash list
stash@{0}: On autoswitch: test-cmd-stash
git stash save "test-cmd-stash"
Saved working directory and index state On autoswitch: test-cmd-stash
HEAD 现在位于 296e8d4 remove unnecessary postion reset in onResume function
git stash list
stash@{0}: On autoswitch: test-cmd-stash

恢复

sh
git stash pop
git stash pop

查看现有stash

可以使用git stash list命令,一个典型的输出如下:

sh
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log

git commit -am

很多时候我们先使用git add 命令将文件修改内容写入暂存区

然后使用git commit 命令将暂存区内容添加到本地仓库中,[message] 是一些备注信息

sh
git commit -m [message]
git commit -m [message]

或者提交暂存区的指定文件到仓库区:

sh
git commit [file1] [file2] ... -m [message]
git commit [file1] [file2] ... -m [message]

可以看到,基本上每次都需要使用git add 命令,那么能不能省略这一步骤,直接commit 呢

那么就是 git commit -am [message]-a参数相当于执行了git add命令

git commit -a -m [message]等价于

sh
git add .
git commit -m [message]
git add .
git commit -m [message]

更进一步简写为 git commit -am [message]

回退之前版本

sh
git reset --hard HEAD^ 
git reset --hard HEAD^ 

^ 表示回到上一个版本,如果需要回退到上上个版本的话,将HEAD^改成HEAD^^, 以此类推。那如果要回退到前100个版本,这种方法肯定不方便,我们可以使用简便命令操作:

sh
git reset --hard HEAD~100 
git reset --hard HEAD~100 

特殊情况:放弃当前所有改动,直接回退到最新版本

sh
git reset --hard origin/master
git reset --hard origin/master

回退过去版本、从过去版本回退最新版本

查看所有版本哈希id

sh
git reflog
git reflog

指定哈希id,进行回退操作

sh
git reset --hard [hash]
git reset --hard [hash]

当前修改的内容提交到新的分支上

sh
# 步骤1:在当前的develop分支上的修改暂存起来
git stash
# 步骤2:暂存修改后,在本地新建分支(develop_backup为新分支的名字)
git checkout -b <branchname> 
# 步骤3:将暂存的修改放到新建分支中
git stash pop
# 步骤4:使用命令进行常规的add、commit步骤
git add.
git commit -a "修改内容"
# 将提交的内容push到远程服务器(在远程也同步新建分支develop_backup)
git push origin <branchname>:<branchname> 
# 步骤1:在当前的develop分支上的修改暂存起来
git stash
# 步骤2:暂存修改后,在本地新建分支(develop_backup为新分支的名字)
git checkout -b <branchname> 
# 步骤3:将暂存的修改放到新建分支中
git stash pop
# 步骤4:使用命令进行常规的add、commit步骤
git add.
git commit -a "修改内容"
# 将提交的内容push到远程服务器(在远程也同步新建分支develop_backup)
git push origin <branchname>:<branchname> 

shell脚本一键git提交

在本地项目文件夹目录中,新建txt文件,加入以下内容,更改后缀为bat,点击即可运行,会将当前项目直接提交

sh
#! /bin/bash
time=$(date "+%Y-%m-%d %H:%M:%S")
git add .
git commit -m ":memo:撰写文档 $time"
git push
#! /bin/bash
time=$(date "+%Y-%m-%d %H:%M:%S")
git add .
git commit -m ":memo:撰写文档 $time"
git push

code review

git日常交流的缩写语

  • LGTM Looks good to me,表示认可这次PR,同意merge 合并代码到远程仓库
  • ASAP as soon as possible! 尽快
  • ACK  acknowledgement, i.e. agreed/accepted change
  • NACK/NAK — negative acknowledgement, i.e. disagree with change and/or concept
  • RFC  —  request for comments, i.e. I think this is a good idea, lets discuss
  • WIP:Work In Progress 「进展中」,常见词汇,这里做为 Best Practice 单独提出来,主要针对改动较多的 PR,可以先提交部分,标题或 Tag 加上 WIP,表示尚未完成,这样别人可以先 review 已提交的部分
  • AFAIK/AFAICT  —  as far as I know / can tell
  • IIRC  —  if I recall correctly
  • IANAL  — “ I am not a lawyer ”, but I smell licensing issues
  • IMO  — (In my opinion),在我看来
  • TL;DR  —  Too Long; Didn't Read 「太长懒得看」,README 文档常见
  • PR  —  Pull request「合并请求」
  • CR  —  Code Review 「代码审查」
  • PTAL  —  Please Take A Look. 你来瞅瞅?用来提示别人来看一下
  • TBR  —  To Be Reviewed. 提示维护者进行 review
  • TBD  —  To Be Done(or Defined/Discussed/Decided/Determined). 根据语境不同意义有所区别,但一般都是还没搞定的意思。
  • TBH  —  To be honest 「老实说」
  • atm  —  at the moment 「现阶段」

vim编辑器

在vim中,任何被复制和删除的文本,都会被保存在 寄存器 (Regists) 中。 例如,使用 yy 命令复制当前行或使用 dd 命令删除当前行,都会同时将当前行放入默认寄存器中

  • 复制yy

  • 粘贴p

  • 删除dd

  • 多行删除 5dd并按Enter键 删除接下来的五行

  • u 撤销最近一次对文本做的修改操作

  • Ctrl+R 恢复最近一次所做的撤销操作

  • U 第一次会撤销对一行文本(光标所在行)做过的全部操作,第二次使用该命令会恢复对该行文本做过的所有操作

  • Esc 退出输入模式,切换到命令模式

  • i 进入输入模式

  • dd 剪切

  • p 复制

  • DEL 删除键,删除光标后一个字符

  • :wq 保存退出

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多

在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件

按ESC键可随时退出底线命令模式

Released under the MIT License.