目录
1.git config --global user.name 账号
2.git config --global user.email 邮箱
Windows:win+s 搜索 “凭据” ,打开凭据管理器
Mac:Finder----应用程序----实用工具-----双击钥匙串----右上角搜索git
删除igit对应凭证,重新clone,输入账号和密码即可更新凭证
A.初始化项目: 若无 package.json 将创建新项目并生成 package.json
B.安装依赖: 若有 package.json 文件,读取并安装项目所需的所有依赖项
原因:一般node、npm版本与原项目相差不大没问题,可能是镜像源不够新,导致包不一样,依赖冲突
git pull -r origin master拉取远程分支并与本地分支合并
1.创建并切换git checkout -b feature-yourname-0.1.1
2.推送到远程git push origin feature-yourname-0.1.1
3.关联分支git push -u origin feature-yourname-0.1.1
0.git config --global --unset credential.helper清除账号密码
1.git config --global user.name 账号
2.git config --global user.email 邮箱
git config --global core.autocrlf false不会自动更改行尾符
git config --global core.safecrlf true不记录换行符diff时
git config --list --show-origin 命令查看所有配置及其来源
1.5?git pull --rebase origin master
3.5?git stash、git pull --rebase、git stash pop解决冲突
视图方法:失败的话会弹出提示,查看命令输出,本质还是命令行操作
4.0.0git status查看修改哪些了文件【命令详解可见下文】
已暂存的修改 (Changes to be committed)
未暂存的修改 (Changes not staged for commit)
4.0.1git restore --staged package-lock.json撤销缓存
4.0.1git restore src/components/markdown.tsx撤销修改
4.1git add . 将所有增删改【new、delete、modified】的文件添加到缓存区等待提交
4.1git add -u:删改【delete、modified】
git remote -v 和git remote查看远程仓库
已暂存的修改 (Changes to be committed):准备提交
未暂存的修改 (Changes not staged for commit):
未追踪的文件 (Untracked files):未加入过远程的新文件
git diff -- src/components/ListChart.tsx查看某个文件
git add . :增删改【new、delete、modified】
git add -u:删改【delete、modified】
git reset --mixed(撤销 commit 和 add 两个动作)
git reset --hard(撤销并舍弃版本号之后的提交记录)
git branch -r查看远程仓库分支(r,remote)
git branch --set-upstream-to=[repository/branch] [local-branch]
git branch -u [repository/branch] [local-branch]
git branch --unset-upstream:解除当前分支关联,包括默认关联的同名分支
git branch --unset-upstream [local-branch]
git push --set-upstream [repository] [branch]
git push -u [repository] [branch]
解决:A.同步 git pull origin feature-yourname-0.1.1
解决:B.强制 git push origin -f feature-yourname-0.1.1
git clone…redirect: https://gitlab.../sign_in
输错密码会直接保存,在钥匙串中删除即可,或者重新安装sourcetree
核心概念
Working Tree 工作树/Workspace工作区
工作树是你当前正在工作的目录,其中包含你的项目文件。
这是你对文件进行修改、创建新文件或删除文件的地方。
Working Tree 中的文件可以处于三种状态:已跟踪(tracked)、未跟踪(untracked)、修改过的但尚未暂存的。
Index 暂存区:暂存区域/索引
是一个临时存储区域,用于准备提交到版本库的更改。
当你修改了工作树中的文件后,你需要将这些更改暂存到 Index,这是通过 git add
命令完成的。
stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中
Repository本地仓库
位于自己的电脑上,通过 git commit
提交暂存区的内容,会进入本地仓库。
Remote Repository远程仓库
用来托管代码的服务器,远程仓库的内容能够被分布在多个地点的处于协作关系的本地仓库修改,本地仓库修改完代码后通过 git push
命令同步代码到远程仓库。
1.准备
1.安装git
Git 下载地址 ,选择自己系统对应的版本下载即可。
三种常见的 Mac 安装 git 工具的方法_mac安装git-CSDN博客
mac
command+space 搜索terminal
git --version
如果本子上已经安装了 git 工具,会输出类似下面的版本信息:
git version 2.24.3 (Apple Git-128)
如果本子上没有,系统可能会给出如下提示信息:
按照提示安装即可
1.5确保自己在git群组,有项目相应权限
2.SSH 克隆
2.1配置SSH key
window
使用你本地的私钥和远程仓库的公钥进行验证是否是一对秘钥
win环境下SSH key 配置_windows ssh key_nandao158的博客-CSDN博客
linxu,mac环境下需要命令生成ssh key
Linux
- 生成key
PowerShell |
mac
-
在你的电脑上生成 ssh 秘钥,打开终端,执行
ssh-keygen -t rsa -C "你公司内部邮箱地址",可以遇见输入一直enter
ssh-keygen -t rsa -C 邮箱
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/.ssh/id_rsa):
键入enter,使用默认地址
Created directory '/Users/.ssh'.
Enter passphrase (empty for no passphrase):
键入enter,不使用密码
-
执行成功,会出现一个字符图
-
切换到
~/.ssh
目录下
cd ~/.ssh
-
查看目录
ls -l
ls
-
打开
id_rsa.pub
文件并查看其内容,复制id_rsa.pub
的内容。
cat ~/.ssh/id_rsa.pub
-
把你的公钥放到Github 上进行托管,一般在头像的设置里添加
ssh key
Github :进入 settings -> SSH and GPG keys
,点击 add ssh key
,将刚才复制的内容粘贴进去
- 复制key到gitlab的ssh key中
2.2克隆
a.命令行方式
PowerShell |
b.vs图形界面方式
2.HTTPS克隆+邮箱/账号密码验证
git clone <URL>
1.git config --global user.name 账号
2.git config --global user.email 邮箱
若提示克隆没有权限
凭据/钥匙串(保存本机账号密码)
Windows:win+s 搜索 “凭据” ,打开凭据管理器
Mac:Finder----应用程序----实用工具-----双击钥匙串----右上角搜索git
删除igit对应凭证,重新clone,输入账号和密码即可更新凭证
3.首次运行
1.查看是否有package.json
2.yarn/npm下载和安装包
A.初始化项目: 若无 package.json
将创建新项目并生成 package.json
#初始化一个新的
package.json
yarn init
#安装依赖,yarn= yarn install 的简写
yarn
B.安装依赖: 若有 package.json
文件,读取并安装项目所需的所有依赖项
注意是 package.json,而不是
package-lock.json
#安装依赖
yarn
tips:
package.json
:依赖关系的配置文件,没有lock文件时,按照package.json安装
package-lock.json
:npm实际安装依赖版本的锁定文件,以确保在不同环境中的一致性,重新安装包时会遵循package-lock.json
yarn.lock:Yarn在安装依赖时会创建或更新这个文件,,重新安装包时会遵循yarn.lock
安装包失败
原因:一般node、npm版本与原项目相差不大没问题,可能是镜像源不够新,导致包不一样,依赖冲突
清空未安装成功的缓存:有时yarn不成功可以用npm安装
npm/yarn cache clean
删除node_modules安装的依赖包+lock文件
如果安装错了,可以删除重安
rm -rf node_modules
rm -rf
命令是递归地强制删除目录,不会将文件移动到垃圾桶或回收站,而是直接从文件系统中删除。
最后方案:拷贝覆盖,mac可能遇到无法跳过的安全验证问题
3.启动 npm run dev=yarn dev
4.更新时保存修改
-
git stash暂存
-
git pull -r origin master拉取远程分支并与本地分支合并
-
git stash pop出栈
2.本地git管理
- git init 初始化库
- git add .
- git commit -m “解释”(如果直接git commit还会进去到vim,qa退出)
- git diff可查看与上个版本的不同(不过建议学会用fork,wq退出查看)
2.多人协作时的首次提交
1.分支
1.创建并切换git checkout -b feature-yourname-0.1.1
创建-b并切换checkout
创建(-b(branch))并切换(checkout)到 feature-name-0.1.1 分支
git checkout -b feature-yourname-0.1.1
查看所有分支
git branch -a
2.推送到远程git push origin feature-yourname-0.1.1
就是远程仓库也建立了该分支,而不仅仅是本地
将本地分支推送到远程origin
git push origin feature-yourname-0.1.1
3.关联分支git push -u origin feature-yourname-0.1.1
默认推送到同名分支
2.全局配置 Git 的用户名和邮箱
在使用新的gitlab仓库迁移旧代码时,当push代码,报了如下异常:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) .fatal: Could not read remote repository.
0.git config --global --unset credential.helper清除账号密码
1.git config --global user.name 账号
2.git config --global user.email 邮箱
首次commit会提示配置
作用:在每个Git项目,每次git操作时,避免每次都手动输入用户名和邮箱
git config --global core.autocrlf false不会自动更改行尾符git config --global core.autocrlf false
git config --global core.safecrlf true不记录换行符diff时#通常情况下这个设置建议开启,否则diff 不同版本时,会记录不同换行符 优先级:开发环境IDE/git客户端/局部>全局/系统配置 |
3.多人协作流程
1.git log:版本号是否一致
查看当前仓库的版本号(第一个是当前仓库的版本号,第二个是最近提交的版本号)
enter:继续输出log
q:退出log
1.5?git pull --rebase origin master
根据版本号是否一致,来看是否要git pull --rebase(拉取最新代码)
远程仓库 origin
rebase 将当前分支的提交逐个应用到 dev/lu
分支的最新提交之后
如果出现冲突,解决冲突后,用 git rebase --continue
继续重放操作。
2.完成需求规范
改动放在相关处,或者末行
不要删空行,减少变动的提示
'use client'
import React from 'react';
import { useTranslation } from 'react-i18next';
import { getFeatures } from './staticData';
export default function HomeContent() {
const { t, i18n } = useTranslation(['home', 'login']);
const features = getFeatures(['zh', 'zh-CN', 'cn'].includes(i18n.language) ? 'cn' : 'en')
vs中查看修改前后对比
修改点击蓝条
格式化代码?
格式化代码(新建 可全部格式化,修改 只格式化 修改的:保证对比时没有格式化的修改)
3.git log:版本号是否一致
3.5?git stash、git pull --rebase、git stash pop解决冲突
git pull --rebase(拉取最新代码,注意是否拉取完成,否则修改就是在临时分支)
重启正在运行的程序(命令行中ctrl+c终止运行)
4.暂存
视图方法:失败的话会弹出提示,查看命令输出,本质还是命令行操作
➕进行staged=git add .
将需要的change,点➕进行staged,不用discard
例如yarn.lock不需要
(Yarn 工具自动生成和维护的文件,用于确保在项目中使用相同的依赖版本。它记录了每个安装的软件包的确切版本,以及它们的依赖关系树)
若视图不显示:可能是更改太多
4.0需要撤销修改/缓存
4.0.0git status查看修改哪些了文件【命令详解可见下文】
已暂存的修改 (Changes to be committed)
未暂存的修改 (Changes not staged for commit)
快速跳转查看不同:cmd/ctrl+点击
4.0.1git restore --staged package-lock.json撤销缓存
等红框中的文件
zsh: no matches found: files
在类 Unix 的 shell(包括 Zsh)中,方括号通常用于模式匹配(globbing),导致 shell 尝试将该模式与已存在的文件或目录进行匹配。
要解决这个问题,你可以通过转义方括号或使用引号来防止 shell 将其解释为模式。
转义方括号:git restore --staged src/app/studio/\[id\]/edit.tsx
使用引号:git restore --staged "src/app/studio/[id]/edit.tsx"
4.0.1git restore src/components/markdown.tsx撤销修改
4.1git add . 将所有增删改【new、delete、modified】的文件添加到缓存区等待提交
. 表示要添加所有修改的文件。如果只需要添加特定的文件,则可以用文件名来代替点 .
4.1git add -u:删改【delete、modified】
5.提交:commit
a方法:可视化
1.commit后会出现描述文件填写的提示
2.git commit -m 描述
追加 git commit --amend
3.git push
若提交不规范,需要重新设置后提交
1.git commit --amend --author="账号 <邮箱>" -m "更新提交作者"
2.git push 分支
b方法:命令行
1.合并(非首次提交:推送到开发分支)
git fetch 查看远程仓库更新
git fetch <remote>将远程仓库的最新状态下载到本地,但不会自动合并或修改你的当前分支。
git rebase origin/develop 拉取
2.npm run commit=git commit
2.1.添加描述
yourname@MBxxx entity_web % git commit
[feature-wrq-0.0.1 xxxx] feature:login page,home page,entity list
Committer: yourname <[email protected]>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly. Run the
following command and follow the instructions in your editor to edit
your configuration file:
git config --global --edit
After doing this, you may fix the identity used for this commit with:
git commit --amend --reset-author
5 files changed, 31 insertions(+), 28 deletions(-)
2.git commit -m 描述
追加 git commit --amend
3.git push
推送到远程仓库,打开网址查看diff
ctrl+c 撤回提交
4.打开网址查看diff
5.构建发布
c.方法:wsl(linux环境)、arc(代码审核)
6.推送:push
1.关联分支git push -u <remote_name> <branch_name>
默认推送到同名分支
2.推送git push
git命令
git add -i
- status – 显示有变化的路径
- 更新 - 将工作树状态添加到暂存的更改集中
- 恢复 – 将分阶段的更改集恢复到 HEAD 版本
- 添加未跟踪 - 将未跟踪文件的内容添加到暂存的更改集中
- 补丁 – 选择帅哥并有选择地更新
- diff – 查看 HEAD 和索引之间的差异
- quit – 退出 Git add 交互模式
- help – 将帮助菜单打印到屏幕上
git remote -v
和git remote查看远程仓库
git remote -v
命令来查看所有远程仓库的详细信息,包括它们的名称
git remote 只查看
它们的名称
origin
: 这是远程仓库的默认名称master:为上线/最新主分支
git pull和git merge拉取/合并分支
git pull=
git fetch+
git merge
git fetch 查看远程仓库更新
git merge
:新增一个merge commit,然后将两个分支的历史联系起来
当需要保留详细的合并信息的时候建议使用,特别是需要将分支合并进入master
分支时
git rebase
:反映差异内容
当发现自己修改某个功能时,频繁进行了git commit
提交时,发现其实过多的提交信息没有必要时使用,分支多,内容多时也可以考虑使用
git pull --rebase更新合并
建议在运行此命令之前,应该首先备份代码或创建一个新的分支来进行实验和测试。
(拉取最新代码,注意是否拉取完成,否则修改就是在临时分支
vs左下角可常看当前分支)
git rebase --continue
git rebase --abort
git commit本地和git push远程
Git commit是将更改保存到本地代码库中的命令,
Git push是将更改从本地代码库同步到远程代码库的命令。
git stash和git stash pop暂存
stash栈(先进后出)
可以在另一个时间点上利用这些更改。 执行完 git stash 命令后,在执行 git pull 完成后,可以通过执行git stash pop 来恢复之前存档的改动。
保存的时间是没有限制的,只要不手动删除 stash 列表中的储藏内容,就会一直保存下去。
使用 git stash 时,会在本地存储库中创建一个储藏列表(stash list)。
每个储藏条目都包含一组更改集(change set):暂存区改动和工作目录改动。
默认情况下,Git 会为每个储藏条目自动生成一个唯一的名字,根据时间戳创建。
git stash list
stash@{N}: WIP on <branch_name>: <commit_message>
stash@{N}
:表示该 stash 的索引号。N 是一个从 0 开始的整数,表示该 stash 在 stash 列表中的位置。最新保存的 stash 的索引号是 0,之前保存的 stash 索引号逐渐递增。WIP on <branch_name>
:表示该 stash 是在哪个分支上保存的工作副本。<branch_name>
是对应的分支名称。<commit_message>
:是在保存 stash 时附加的可选描述或提交消息。它可以是任意字符串,用于说明保存 stash 时的目的或内容。
stash@{0}: WIP on feature-branch: Adding new feature
自定义名git stash<stash name>
查看git stash list,
恢复git stash apply,最近的一个
恢复git stash apply <stash name>,
git stash pop stash@{N}
(apply恢复,pop 恢复单且从list删除删除)
删除git stash drop and git stash drop <stash name> 等命令。
清空Git栈git stash clear
git status查看修改哪些了文件
已暂存的修改 (Changes to be committed):准备提交
未暂存的修改 (Changes not staged for commit):
未追踪的文件 (Untracked files):未加入过远程的新文件
可以使用 git add
命令将其添加到暂存区,然后进行提交。
git restore
还原文件
git restore --staged <file>撤销缓存
git restore <file>撤销修改
git diff 查看修改前后的差异
按enter可以继续查看差异,键入wq退出
git diff命令用于比较两个不同的代码版本之间的差异,
它可以用来比较
工作目录和暂存区之间的差异、
暂存区和最新提交之间的差异、
本地分支之间的差异等。
git diff比较工作目录和最新提交之间的差异。在这种情况下,命令将显示所有未添加到暂存区(Untracked files)的更改,即尚未提交的更改。
例如,可以通过以下命令比较工作目录中的文件file.txt与最新提交之间的差异:
Plaintext |
如果要比较暂存区中的更改与最新提交之间的差异,可以使用以下命令:
Plaintext |
还可以将git diff命令与其他命令一起使用,例如git diff branch1..branch2用于比较两个分支之间的差异。
git diff -- src/components/ListChart.tsx查看某个文件
git log查看提交记录
按enter可以接着看下调,键入wq退出查看
git log -1查看最近一条的提交记录
commit +<hash值>
git add添加到缓存区等待提交
git add . :增删改【new、delete、modified】
添加到 Git 仓库的缓存区(Index)以备提交
. 表示要添加所有修改的文件。如果只需要添加特定的文件,则可以用文件名来代替点 .
git add -u:删改【delete、modified】
git commit -m 信息:提交缓存区到仓库中
git commit -m "add doc"
这是 Git 中的一条命令,作用是将暂存区中的文件提交到版本库中。其中 -m 表示后面可以输入一段提交信息,用于描述本次提交的内容。
比如 git commit -m "add doc" 就表示将该次提交命名为“add doc”,提交信息用于说明本次提交添加了文档内容。
版本回退/回滚:撤销提交
未push到远程仓库
git reset --soft(撤销commit)
git reset --mixed(撤销 commit 和 add 两个动作)
push到了远程仓库
git reset --hard(撤销并舍弃版本号之后的提交记录)
git revert(撤销,但是保留了提交记录)
分支
版本规范
x.x.x:(大版本).(功能).(bug)
0.x.x版本代表还没发布
分支规范/起名
(1)主分支(master):第一次向 git 仓库中提交更新记录时自动产生的一个分支,有两个镜像:线上分支,开发分支
(2)开发分支(develop):作为开发的主分支,基于 master 分支创建。develop-版本
(3)功能分支(feature):作为开发具体功能的分支,基于开发分支创建。feature-yourname-版本
(4)环境分支(env):测试
env-test:
env-sandbox(沙箱分支):隔离环境,在其中运行不受信任或未知来源的代码,而不会影响到系统或应用的其他部分。
develop
develop-0.1.3
feature-yourname-0.1.1
* feature-yourname-0.1.3
remotes/origin/HEAD -> origin/develop
remotes/origin/develop
remotes/origin/develop-0.1.2
remotes/origin/develop-0.1.3
remotes/origin/feature-yourname-0.1.1
remotes/origin/feature-otherpeople
remotes/origin/master
remotes/origin/revert-87f9a77d
git branch查看本地分支
以
*
标记当前所在的分支
git branch -r查看远程仓库分支(r,remote)
git branch -a查看所有仓库分支(a,all)
包括本地分支和远程分支
* master
develop
feature-branch
remotes/origin/master
remotes/origin/develop
remotes/origin/feature-branch
git branch 分支名:创建分支
git checkout -b 分支名:创建并切换到该分支
git checkout 分支名:切换分支
未提交的修改:git stash
如果在切换分支前有未提交的修改,Git 会提示你这些修改可能会丢失,此时你可以保留修改、提交它们,也可以放弃它们并从其他分支 checkout 后的某个版本开始:
Plaintext |
关联分支(push/fetch/pull 不用写分支名)
--set-upstream 或简写为-u 参数将本地分支与远程分支进行关联
.git/config
[branch "test"]
remote = origin
merge = refs/heads/test
git checkout -b [local-branch] [repository/branch]:创建切换关联
以下省略[local-branch]时代表当前分支
git branch --set-upstream-to=[repository/branch] [local-branch]
git branch -u [repository/branch] [local-branch]
git branch --unset-upstream:解除当前分支关联,包括默认关联的同名分支
git branch --unset-upstream [local-branch]
从 Git 版本 1.8.0 开始git branch --set-upstream
是被废弃的,应使用 git branch --set-upstream-to
来替代,但git push --set-upstream仍有效
git push --set-upstream [repository] [branch]
git push -u [repository] [branch]
git merge 来源分支 合并分支
(必须在master分支上才能合并develop分支)
git branch -d 分支名称 删除分支
(分支被合并后才允许删除)(-D 强制删除)
- 恢复单个文件到指定版本:git checkout HEAD~ my-file.js
- 切换远程分支到本地:git checkout --track origin/remote-branch-name
- 将修改全部或部分(可选)撤销:git checkout -- path/to/my/file
报错
non-fast-forward
! [rejected] feature-yourname-0.1.1 -> feature-yourname-0.1.1 (non-fast-forward)
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
原因:当前分支的最新提交落后于远程分支的最新提交
解决:A.同步 git pull origin feature-yourname-0.1.1
将远程分支的最新更改合并到你的本地分支上
git push origin feature-yourname-0.1.1
解决:B.强制 git push origin -f feature-yourname-0.1.1
-f强制-force
Git会忽略本地分支与远程分支之间的历史差异,并将本地分支强制推送到远程分支,覆盖远程分支上的提交。
使用-f
选项需要谨慎,因为它会更改远程分支的提交历史,可能会导致其他开发人员的问题,特别是当多人同时使用同一个远程分支进行开发时。
只有在确信没有其他人依赖或基于旧提交历史工作的情况下,才应该使用-f
选项。确保在使用-f
选项之前,了解所有相关的风险并与团队成员协商
git clone…redirect: https://gitlab.../sign_in
该错误显示GitLab重定向到登录页面,因为没有授权访问特定的Git存储库。要解决此问题,请尝试以下步骤:
- 请先检查输入的 Git 存储库 URL 是否正确。
- 确保全局配置中设置了用户名和电子邮件地址。
Plaintext |
检查是否有权限访问 GitLab 代码库,如果没有,请联系管理员进行授权。
cat C:\Users\Your Name\.gitconfig
[user]
name = Your Name
email = [email protected]
[core]
autocrlf = false
Cat.concatenate,Concatenate files and print on the standard output;意思是连接文件并显示在标准输出上。
vim常见命令
enter(让其接着输出)
q退出(无法输入时或者需要中断时)
ls查看目录
快捷键
vscode代码格式化Shift+Alt+F
windows
git bash复制粘贴Ctrl/Shift+ins(v)
git bash鼠标右击后就有复制和粘贴选项,
Ctrl+ins 复制
Shift+ins 粘贴
(只不过将v换成了insert)
git教程
Git不要只会pull和push,试试这5条提高效率的命令 - 掘金
相关工具
yarn(js包管理)
日常命令集成
Windows TerminalMicrosoft Apps
用于 windows 日常命令的执行,以及各种 shell 的集成(cmd、powershell、git shell)
Linux系统WSL2
rm -r删除
删除目录及其包含的文件和子目录。其中 -r 表示要递归删除目录中所有内容,包括子目录。
需要注意的是该命令会立即删除目录及其全部内容,并且不会进行确认提示。
Fork 提高git 效率
Fork - a fast and friendly git client for Mac and Windows
git的GUI界面:最好用的GIT版本管理工具 - Fork使用说明 - 知乎
F5刷新
远程仓库clone,repository本地仓库
git客户端管理:托管git,无需邮箱账号登git权限配置
例如外包:不同公司不同库,对应不同账号
git客户端只是可视化管理而已,git权限配置在拉取到本地的仓库中
Sourcetree
输错密码会直接保存,在钥匙串中删除即可,或者重新安装sourcetree
应用程序->实用工具->钥匙串