Git是一种版本控制器,git可以帮我们管理我们的代码保证代码不丢失,记录历史只要代码提交到git上就永久不会丢失,可以随时穿越,团队协作,强大的分支管理功能。
安装
- windows git下载地址
- mac如果安装过xcode自带的git,homebrew是mac的包管理器
- mac的命令行工具 http://ohmyz.sh/ http://www.iterm2.com
git --version
查看版本号git 图形化工具 SourceTree
或Git GUI
初始化仓库
git init
初始化git仓库git clone <git-repo>
克隆已被git管理项目
git配置
项目仓库配置文件:项目/.git/config
只对本项目仓库生效
git config --local user.name tew
git config --local user.email xxx@163.co
git config --local -l
当前项目仓库的git配置
全局配置文件:~/.gitconfig或用户/.gitconfig
全局生效,当前登录用户级别
git config --global user.name tew
配置用户名git config --global user.email xxx@163.com
配置用户邮箱git config --global core.autocrlf false
禁用换行符自动转换 取消windows下拉取项目将lf转为crlfgit config --list 或 git config -l
查看git系统配置git config --global -l
查看git全局配置git config --global --unset user.name
删除全局配置
系统级配置文件: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项目关联的三种方式
- 本地新建好 Git 项目,然后关联远程仓库`
git init
初始化一个Git仓库git add .
将文件添加到暂存区git commit -m "提交"
提交暂存区文件git remote add origin <git-repo-url>
关联远程仓库git push -u origin master
推送到远程仓库
- 已建好远程仓库 然后clone到本地
git clone <git-repo-url>
- 将已使用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)
- 设置权限
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Confirm
- 使用PowerShellGet安装
PowerShellGet\Install-Module posh-git -Scope CurrentUser
- 全局导入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 //保存用户名和密码