git基本操作

Git是一种版本控制器,git可以帮我们管理我们的代码保证代码不丢失,记录历史只要代码提交到git上就永久不会丢失,可以随时穿越,团队协作,强大的分支管理功能。

安装

初始化仓库

  • git init 初始化git仓库
  • git clone <git-repo> 克隆已被git管理项目

git配置

  1. 项目仓库配置文件:项目/.git/config 只对本项目仓库生效
  • git config --local user.name tew
  • git config --local user.email xxx@163.co
  • git config --local -l 当前项目仓库的git配置
  1. 全局配置文件:~/.gitconfig或用户/.gitconfig 全局生效,当前登录用户级别
  • git config --global user.name tew 配置用户名
  • git config --global user.email xxx@163.com 配置用户邮箱
  • git config --global core.autocrlf false 禁用换行符自动转换 取消windows下拉取项目将lf转为crlf
  • git config --list 或 git config -l 查看git系统配置
  • git config --global -l 查看git全局配置
  • git config --global --unset user.name 删除全局配置
  1. 系统级配置文件:git安装路径下的/etc/gitconfig文件
  • git config --system -l 系统级的git配置

配置信息的优先级:local>global>system。对于所有用户都通用的配置放在system中,对于每个独立用户的配置项放在global中,对于某个仓库特殊的配置放在local中

git的三种区域

  • 工作区 即开发者的工作目录
  • 暂存区 修改已被记录,但尚未录入版本库的区域
  • 版本库 存储变化日志及版本信息

git-open 在浏览器中打开git项目对应的仓库地址

npm i -g git-open
在任何一个git目录,输入git open 就可以在你的浏览器中打开git项目对应的仓库地址, 支持GitHub, GitLab

常用命令

  • git add . 将所有工作区文件添加到暂存区
  • git add file1 file2 ... 将多个文件添加到暂存区 多个文件用空格隔开
  • git add -u 只把修改过的文件加入暂存区,不增加新增的
  • git status 查看工作区状态
  • git show <commitId> 查看某次commit所做的更改
  • git commit -m <message> 提交暂存区文件到版本库
  • git commit -am <message> 提交暂存区已修改文件到版本库 无法提交为跟踪文件(未执行git add操作)
  • git commit -amend 修改提交的文件内容或提交信息
  • git pull 远程仓库拉取项目最新代码到工作区
  • git push 将提交推送至远程仓库

版本回退 将版本库从当前版本回退到指定版本

  • git reset --hard <commitId> 回退本分支到某次提交,重置工作区与暂存区
  • git reset --hard HEAD^ 回退到前1个版本
  • git reset --hard HEAD^^ 回退到前2个版本
  • git reset --hard HEAD~n 回退到前n个版本
  • git reset --hard 版本号 回退到指定版本
    git reset它可以被用来移除提交快照,尽管它通常被用来撤销暂存区和工作区的修改。不管是哪种情况,它应该只被用于本地修改——你永远不应该重设和其他开发者共享的快照。当你用 reset 回滚到了某个版本后,那么在下一次 git 提交时,之前该版本后面的版本会被作为垃圾删掉。如果要修改远程共享提交快照请使用git revert

git分支

  • git branch 查看本地分支
  • git branch -r 查看所有远程分支
  • git branch -a 查看所有分支
  • git branch devTest 创建分支
  • git checkout devTest 切换分支
  • git merge devTest 合并分支
  • git branch -d devTest 删除分支
  • git branch -D devTest 强制删除分支
  • git branch -m devTest test更改分支名称
  • git checkout -b devFlow 创建devFlow分支并立即切换到devFlow分支上
  • git cherry-pick [commit] 选择一个commit,合并进当前分支
  • git rebase <branch> 衍合指定分支到当前分支
  • git revert <commit> 撤销指定的提交注:git checkout 文件名或路径` 将暂存区内容还原到工作区(撤销更改)

git项目关联的三种方式

  1. 本地新建好 Git 项目,然后关联远程仓库`
  • git init 初始化一个Git仓库
  • git add . 将文件添加到暂存区
  • git commit -m "提交" 提交暂存区文件
  • git remote add origin <git-repo-url> 关联远程仓库
  • git push -u origin master 推送到远程仓库
  1. 已建好远程仓库 然后clone到本地
    git clone <git-repo-url>
  2. 将已使用git管理但未关联远程的项目 和指定的远程仓库关联
    git remote add origin git@github.com:ittew/tetsts.git
    git push -u origin master

远程仓库

  • git remote add '别名' '远程仓库地址' 添加远程仓库并起别名
  • git remote 查看远程仓库的详细信息
  • git remote-v 查看远程仓库的地址
  • git remote remove '别名' 删除远程仓库的别名
  • git remote rename '旧名称' '新名称' 更改远程仓库别名
  • git remote set-url origin <newurl> 设置或修改远程仓库的地址

git配置公钥登录 避免每次都要输入用户名/密码

  • 创建公钥ssh key ssh-keygen -t rsa –C 'xxx@163.com' 一路按回车即可 邮箱为git账号绑定的邮箱
  • 在用户目录下找到.ssh目录下id_rsa.pup(公钥)文件 C:\Users\Administrator\.ssh\id_rsa.pup
  • 用编辑器打开id_rsa.pup文件复制全部内容
  • 在gitlab、github或码云上的个人中心添加新的SSH公钥 将复制的内容粘贴进去
  • 测试验证是否配置成功 ssh -T git@github.com 看到以下内容及成功
    Hi ittew! You've successfully authenticated, but GitHub does not provide shell access.
  • 最重要的一步 git remote -v 查看你当前的远程 remote url 不用https协议,改用git 协议(即SSH)
    git remote set-url origin <sshUrl> 或 将项目目录.git的config文件修改里面的url为git@github.com:xxx/xxx.git
  • 再次查看 git remote -v 出现以下内容即修改成功
    1
    2
    3
    4
    5
    6
    // 修改前 git remote -v
    origin https://github.com/ittew/mpvue-book.git (fetch)
    origin https://github.com/ittew/mpvue-book.git (push)
    // 修改后 git remote -v
    origin git@github.com:ittew/hexo.git (fetch)
    origin git@github.com:ittew/hexo.git (push)

git免密登录的三种方式

  • 配置SSH免密登录 (git配置公钥登录)
  • 在URL中实现

    1
    2
    3
    原来的地址:https://github.com/xxx.git
    修改的地址:https://用户名:密码@github.com/xxx.git
    git remote add origin master https://用户名:密码@github.com/xxx.git
  • 添加git管理凭证
    git config --global credential.helper store 输入完git账号密码后执行会保存凭证不用再输入账号和密码
    参考资料:Git凭证存储

vscode 设置 PowerShell 显示当前分支、更新提示和提交状态

VSCode终端默认使用PowerShell,启动powershell,分别执行下面3个命令(提示都输入Yes)

  1. 设置权限
    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Confirm
  2. 使用PowerShellGet安装
    PowerShellGet\Install-Module posh-git -Scope CurrentUser
  3. 全局导入posh-git
    Add-PoshGitToProfile -AllHosts

git日志

  • git log 显示提交日志
  • git log --pretty=oneline 格式化日志格式
  • git log --graph 图形化日志记录
  • git reflog 可以查看所有分支的所有操作记录
  • git shortlog -sn 统计每个作者的提交个数
  • git shortlog -sn --no-merges 统计每个作者的提交个数,不包含merge commit
  • git shortlog 统计每个作者的提交情况
  • history > log.txt 输出git的所有历史记录

git忽略文件`

.gitignore 忽略文件,让git不在管理当前项目下的某些文件

1
2
3
4
5
6
7
项目根目录新建 .gitignore 文件
.idea 忽略单个文件
dist/ 忽略文件夹
node_modules/ 忽略文件夹
*.h 忽略以 .h 结尾的文件
!con.h 不忽略 con.h 文件
*.h[s|d] 忽略以 .hs.hd 结尾文件

更多参考:不同开发语言的gitignore设置

其他

  • git remote prune origin 远程已经删除的分支,在本地执行git branch -a显示还存在,执行以下命令可以清除
  • git中操作多个文件使用空格将其隔开即可 如 git add file1 file2 ...
  • git rm filename 删除暂存区和工作区的文件
  • git rm --cached filename 只删除暂存区的文件,不会删除工作区的文件
  • git修改密码或输错密码后需重新输入密码并保存密码
  • git config core.ignorecase false 设置大小写敏感
    1
    2
    3
    4
    5
    6
    // 修改git密码后  执行 gitpull 报错 Authentication failed for 'xxx.git'
    // 1. 直接修改windows凭据中的git账号密码
    git config --system --unset credential.helper // 2. 不用默认保存的git秘钥
    // 执行git pull等相关命令重新输入用户名和密码
    // 若后续操作每次都需要输入用户名和密码 则执行保存用户名和密码的操作
    git config --global credential.helper manager //保存用户名和密码

参考资料

Git-关于版本控制
Git 常用命令图
为了前端的深度-git的命令行
Git教程–廖雪峰

-------------本文结束感谢您的阅读-------------
0%