工作多年,关于git有很多便捷的操作工具,但我还是习惯了去敲命令。因此,在这里记录一下自己工作过程中用到的“手册”指南。
git安装
首先,是git的安装,我自己是macOS系统。这里就简单讲一下关于macOS系统git官网的两种安装。
-
通过
Homebrew命令安装:brew install gitHomebrew的安装可以参看一下我的上一片文章Homebrew安装教程 -
通过
pkg包安装:git安装包下载
下载好安装包,右键打开,发现macOS提示无法打开。
解决方案:按住command,点击打开,会出现如下弹窗提示macOS无法验证。
此时,继续点击打开。即可进入正常安装流程。
git安装好之后,生成SSH Keys,并添加到GitLab中。

生成SSH Keys密钥:ssh-keygen -t rsa -C "youremail@example.com"
git使用
当git push报错如下时
在终端执行如下命令
ssh-keygen -R git.tarstech.com
这是一个常见的 SSH 连接问题,通常发生在远程服务器(git.tarstech.com)重装系统或更新了 SSH 配置后,导致其“指纹”(Host Key)发生了变化,与你本地电脑记录的不一致。
由于你确认可以通过浏览器正常访问该网站,说明服务器是正常的,只是本地的“信任记录”过期了。
我已经帮你执行了修复命令: ssh-keygen -R git.tarstech.com
现在你可以重试之前的 Git 操作了。 (注意:第一次重试时,终端可能会提示 Are you sure you want to continue connecting (yes/no/[fingerprint])? ,请直接输入 yes 并回车即可)。
如何避免每次git push 的时候都要输入一次ssh密钥
要避免每次 git push 时都输入 SSH 密钥密码(passphrase),你可以将 SSH 密钥添加到 ssh-agent 中。macOS 的 Keychain(钥匙串)可以帮你记住这个密码。
请在终端中按顺序执行以下步骤:
1. 启动 ssh-agent
确保 ssh-agent 正在运行:
eval "$(ssh-agent -s)"
2. 修改 SSH 配置文件
你需要配置 SSH 以便自动将密钥存储到 Apple Keychain 中。 打开(或创建) ~/.ssh/config 文件:
open ~/.ssh/config
(如果文件不存在,可以用 touch ~/.ssh/config 创建)
在文件中添加以下内容:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
(注意:如果你使用的是特定的密钥文件名而不是默认的 id_rsa ,请修改 IdentityFile 这一行的路径,例如 ~/.ssh/id_ed25519 )
3. 将私钥添加到 ssh-agent
运行以下命令,将私钥添加到代理中。 这一步会要求你输入最后一次密码 :
ssh-add --apple-use-keychain ~/.ssh/id_rsa
(同样,如果你的密钥文件名不是 id_rsa ,请替换为实际文件名)
4. 验证
现在尝试再次 push 代码,应该就不会再提示输入密码了。
补充说明: 如果你是在问 HTTPS 方式(每次都要输入用户名/密码),则可以使用 credential helper:
git config --global credential.helper osxkeychain
git切换仓库
项目原来的git仓库是A,对应的邮箱A,现在更换成了仓库B,邮箱也是对应的B. 两个邮箱对应的SSH密钥也不同,SSH密钥的文件是id_rsa_company, 且已经在新的git上添加了SSH密钥。 那我要如何操作,才可以将本地项目与新的仓库关联上。并将代码提交上去?
- 实现步骤:
- 1、确保你的 ~/.ssh/config 文件中有对新仓库的配置
vim ~/.ssh/config常用 Vim 快捷键总结
- i - 进入插入模式(开始编辑)
- Esc - 退出插入模式,回到普通模式
- :w - 保存文件
- :q - 退出
- :wq - 保存并退出
- :q! - 强制退出不保存
- 2、添加以下内容(如果没有的话):
# 原仓库A(如果需要保留访问) Host github.com-A HostName github.com User git IdentityFile ~/.ssh/id_rsa # 新仓库B Host github.com-B HostName github.com User git IdentityFile ~/.ssh/id_rsa_company- 3、查看当前远程仓库信息
# 查看当前的远程仓库 git remote -v # 查看当前远程仓库的URL git remote get-url origin- 4、修改远程仓库地址
// 方法一:直接修改remote URL(推荐) # 移除旧的origin git remote remove origin # 添加新的origin git remote add origin git@github.com-B:username/repo-name.git # 或者如果你的SSH config没有配置别名,直接用完整路径 git remote add origin git@github.com:username/repo-name.git // 方法二: ### 如果不想删除,直接修改URL git remote set-url origin git@github.com-B:username/repo-name.git- 5、配置用户信息
# 设置新的邮箱和用户名(针对这个仓库) git config user.email "new-email-B@company.com" git config user.name "Your New Name" # 或者设置为全局(所有仓库) git config --global user.email "new-email-B@company.com" git config --global user.name "Your New Name" # 验证配置 git config --local --list | grep user- 6、推送代码到新仓库
修改 git 用户
git config --global user.email "youremail@example.com"
创建分支
git checkout -b dev
查看分支
// 查看本地分支
git branch
// 查看本地和远程分支
git branch -a
分支操作
// 切换分支
git checkout dev(分支名)
// 合并分支
git merge dev(分支名)
// 撤销合并操作
git merge --abort
// 删除分支
git branch -d dev(分支名)
// 强制删除分支
git branch -D dev(分支名)
提交项目到远程分支
// 提交三部曲
git add .
git commit -m '说明/备注'
git push
// 首次提交非 master 分支
git push -u origin dev
// 之后的提交 就可以直接使用
git push
// 强制推送(带 -f 表示舍弃线上文件,否则保留线上的 README文件)
git push -u origin dev -f
或
git push -f origin dev
// 更新代码
git pull
// 首次提交项目到github
git init
git remote -v
git remote add origin 项目地址
> 注意:如果报错 `fatal: remote origin already exists`时
> 先执行 `git remote rm origin` 再进行添加
git pull origin master
> 目的:同步REDADME
然后执行`提交三部曲`
// 不是首次提交
直接执行 `三部曲`
git add . 提交报警告
warning:LF will be replaced by CRLF in ××××.××(文件名) The file will have its original line ending in your working directory.
git config --global core.autocrlf false
查看提交记录
git log
// 退出查看:直接输入字母q
回滚指定版本
git reset --hard 版本号 (8d722bb6e976f255f9c4c1bf9233c386d69ca5ed)
git暂存区使用
// 备份当前工作区的内容,代码提交到 暂存区
git stash
// 获取最近一次 stash 进去的内容,恢复到工作区
git stash pop
// 查看所有的 stash
git stash list
// 恢复制定版本的备份
git stash apply stash@{1}
// 清空git 暂存区栈
git stash clear
git项目分为 3个区域:工作区、暂存区、git仓库(本地仓库 和 远程仓库)
- 工作区:本地编写的代码,不执行任何
git命令,处于工作区。 - 暂存区:执行
git add命令时,会将工作区的文件标记为已暂存,保存在暂存区. - 仓库:执行
git commit命令时,会将标记为 已暂存的文件保存到本地仓库,并生成一个快照。1、查看文件修改
// 在没有暂存之前(没有执行 git add 命令),查看某文件的本地修改 git diff -- 【fileName】 // fileName 为指定文件名,不添加,则查看所有修改。 // 撤销文件的本地修改 git checkout -- [fileName] git checkout -- . // 撤销所有文件的本地修改 '注意:该命令不可二次“反悔”,本地操作一旦撤销,将无法通过git返回' // 在暂存之后(执行 git add . 命令后),查看暂存区的修改 git diff --staged [fileName] // 撤销暂存区全部修改 git reset .2、服务器代码合并本地代码
git stash // 暂存当前正在进行中的工作 git pull // 拉取服务器的代码 git stash pop // 合并暂存的代码3、代码写错分支,如何将一个分支的修改转移到另一个分支
git add . // 所有修改提交暂存区,先不要 git commit git stash // 把暂存区的修改先存储起来 git checkout dev // 切换到正确的分支 git stash pop // 将存储的修改取出来 // 然后就可以继续在正确的分支上进行开发。 // 如果已经 commit 了 先执行 git reset HEAD^ // 撤回到刚刚 commit 之前的状态4、修改
dev分支,临时需要切换分支。修改紧急buggit stash // 代码提交暂存区,然后切换分支
git多个分支修改信息后,及时commit,但不push,然后切换到想要的分支,修改代码后commit。所有分支互不影响。此操作,适合
本地多分支开发的场景。
服务器代码覆盖本地代码
git reset --hard // 回滚到上一个版本
git pull origin master // 拉去master分支代码
git中Please enter a commit message to explain why this merge is necessary.
git 在pull或者合并分支的时候有时会遇到这个界面。可以不管,直接进行如下操作:
- 按键
esc - 输入
:wq,然后按回车退出该界面即可
dev分支完全覆盖master分支
首先:'git reset --hard origin/master'
然后:强制推送远程
远程分支覆盖本地分支
git fetch --all
git reset --hard origin/master // master是修改为对应的分支名
git pull
从远程仓库拉取指定分支到本地
// 与远程仓库建立连接
git remote add origin xxx.git
// 查看本地是否具有 dev 分支
git branch
// 如果没有
git fetch origin dev
// 在本地创建分支dev 并切换到该分支
git checkout -b dev origin/dev
// 将远程 dev分支上的内容拉取到本地
git pull origin dev
本地分支与远程分支没有建立连接
报错错误:
fatal: The current branch find has no upstream branch. To push the current branch and set the remote as upstream, use
- 如果 远程有分支(branch_name),本地没有该分支
git checkout --track origin/branch_name
- 如果 远程没有分支(branch_name),本地有该分支
git push --set-upstream origin 远程分支名
- 如果 远程和本地都有分支(branch_name),但是没有建立连接
git branch --set-upstream-to=origin/远程分支名 本地分支名
拉取远程分支 next,并与本地master 分支合并
git pull origin next:master
拉取指定分支(dev)代码
git clone -b dev xxx.git(项目地址)
从一个git仓库拷贝到另一个git仓库
// 1、先从原地址 clone 一份代码到本地
git clone 原仓库地址
// 2、进入克隆下来的项目目录
cd 项目目录
// 3、以镜像推送的方式上传代码到新的仓库地址
git push --mirror 新仓库地址
git项目源查看、切换、删除
// 查看
git remote -v
// 切换
git remote set-url origin xxx.git(新项目地址)
// 删除
git remote rm xxx.git(项目源地址)
git强制commit,针对代码不能提交的情况(vue严谨模式、eslint、yarn lint,用于忽略检测)
git commit -m "提交备注" --no-verify
查看commit
// 查看commit了,但是未push到远程分支的描述/说明
git cherry -v
// 查看了commit了,但是未push到远程分支的详细信息
git log master ^origin/master
查看某个分支是从哪个分支拉出来的
git reflog --date=local | grep 分支名
解决git每次推送仓库都要输入用户名密码的解决方案
git config --global credential.helper store