本文目录
git基础用法
git 拉取仓库指定目录
// 在本地指定文件夹内执行此命令设置为git仓库
git init
// 拉取remote all objects信息
// 添加远程仓库地址,实现拉取remote的all objects信息
git remote add origin http://github/xxx.git
// 开启sparse clone
// 用于控制是否允许设置pull指定文件/夹,适用于Git1.7.0以后版本,本质是开启sparse clone
git config core.sparsecheckout true
// 本地目录的.git文件夹下,如果没有sparse-checkout文件则创建,在其中添加指定的文件/夹fileName,就是需要拉取的那个特定文件/夹。*表示所有,!表示匹配相反
echo "fileName" >> .git/info/sparse-checkout
// 查看
cat .git/info/sparse-chechout
// 拉取指定目录
// 拉取命令是一样的,只是已经通过配置文件sparse-chechout指定了目标文件/夹
git pull origin master
git 配置
// 用户名配置:
git config ––global user.name “Your Name Here”
// 邮箱配置:
git config ––global user.email "your_email@youremail.com"
// 查看配置:
git config ––list
问题:git config配置用户名和邮箱的时候经常会报这个错
error: key does not contain a section: –-global
解决:输入- -global 的时候, 用自己的键盘敲出来!不要直接复制粘贴,直接复制粘贴就会报error。
生成SSH key
终端输入:
ssh-keygen -t rsa -C "568312046@qq.com"
回车后提示输入密码, 此处密码可以不填, 直接回车,提示再次输入密码, 直接回车,生成成功,会在下面路径生成你的公私钥
私钥:id_rsa
公钥:id_rsa.pub
Windows:
c盘->用户->用户名->.ssh
Mac:
~/.ssh
登录github。打开setting->SSH keys,点击右上角 New SSH key,把生成好的公钥id_rsa.pub放进 key输入框中,再为当前的key起一个title来区分每个key。
克隆 git 代码到当前代码库
git clone +仓库地址
创建本地 develop 分支
//查看本地分支
git branch –-list
//查看所有的线上分支
git branch -a
//查看远程分支
git branch -r
//查看远程仓库:
git remote -v
//创建本地分支
git branch develop
//删除本地分支
git branch -d develop
//切换分支 切换到 develop 分支
git checkout develop
//切换到线上的分支
git checkout -b 本地新建的分支名 origin/线上分支名
从远程服务器更新文件到本地
//git pull是<远程分支>:<本地分支>
git pull
我们查看到远程有一个叫origin的仓库,我们可以使用如下命令从origin远程仓库获取最新版本的代码
git fetch origin master:temp
上面代码的意思是:从远程的origin仓库的master分支下载到本地master并新建一个temp分支
注意:不建议使用pull拉取最新代码,因为pull拉取下来后会自动和本地分支合并
获取最新版本 有两种 拉取 和 获取 pull 和 fetch
git pull 从远程拉取最新版本 到本地 自动合并 merge
git pull origin master
git fetch 从远程获取最新版本 到本地 不会自动合并 merge
git fetch origin master
git log -p master ../origin/master
git merge orgin/master
实际使用中 使用git fetch 更安全 在merge之前可以看清楚 更新情况 再决定是否合并
fork 别人项目
git remote add origin +地址
git pull origin master
git branch -M master
添加 / 删除一个文件
添加一个新文件
git add index.html
添加修改和新建的文件
git add .
添加修改和删除
git add -u
添加所有修改
git add -A
删除一个文件
git rm index.html
提交修改
//注意:此时的提交只是修改了本地缓存,并没有提交到远程服务器
git commit -m “备注信息”
提交到远程服务器
git push <远程主机名> <本地分支名>:<远程分支名>
//如果省略远程分支名,该远程分支不存在,则会被新建。
//将当前分支推送到origin主机的对应分支
git push origin master
//如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
git push origin :master
# 等同于
git push origin --delete master
//如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机。将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
git push -u origin master
忽略文件
创建一个名为 .gitignore 的文件,列出要忽略的文件模式
# 所有 .js 后缀的文件都忽略
*.js
# 不忽略lib.js, 尽管上面忽略了所有的 .js 文件
!lib.js
# 只忽略根目录下的TODO目录,不作用于子目录下的TODO
/TODO
# 忽略所有build目录下的文件 包括子目录下的build, 例如 /build /lib/build
build/
# 只忽略doc下的.txt文件 doc子目录下的.txt不受影响
doc/*.txt
# 忽略doc下以及子目录下的.pdf
doc/**/*.pdf
比较版本差异
//可查看工作区有文件是否被修改过
git status
//可查看工作区和暂存区的差异
git diff
//可查看工作区和 HEAD(当前工作分支)相比的差异
git diff HEAD
//可查看暂存区和历史区的差异。
git diff –cached
//查看temp分支与本地原有分支的不同
git diff temp
//将temp分支和本地的master分支合并
git merge temp
//删除temp分支
git branch -d temp
保存和恢复工作进度
git stash
//保存当前的工作进度。会分别对暂存区和工作区的状态进行保存
git stash save “message…”
//这条命令实际上是第一条 git stash 命令的完整版
git stash list
//显示进度列表。此命令显然暗示了git stash 可以多次保存工作进度,并用在恢复时候进行选择
git stash pop [–index] []
//如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除。
//如果提供参数(来自 git stash list 显示的列表),则从该中恢复。恢复完毕也将从进度列表中删除。
//选项–index 除了恢复工作区的文件外,还尝试恢复暂存区。
git stash apply [–index] []
//除了不删除恢复的进度之外,其余和 git stash pop 命令一样
git stash clear
//删除所有存储的进度
合并分支
将dev分支合并到master分支,操作如下:
切换到master分支上
git checkout master
如果是多人开发的话 需要把远程master上的代码pull下来
git pull origin master
//如果是自己一个开发就没有必要了,为了保险期间还是pull
然后我们把dev分支的代码合并到master上
git merge dev
然后查看状态及执行提交命令
git status
最后执行下面提交命令
git push origin master
On branch master
Your branch is ahead of 'origin/master' by 12 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
//上面的意思就是你有12个commit,需要push到远程master上
其他命令
更新远程分支列表
git remote update origin --prune
查看所有分支
git branch -a
删除远程分支Chapater6
git push origin --delete Chapater6
删除本地分支 Chapater6
git branch -d Chapater6
tag
创建tag(一般在master下)
git tag -a v4.9.3 -m “v4.9.3”
git push origin v4.9.3
删除tag
1. 删除本地tag
git tag -d v4.9.3
2. 删除远程tag
git push origin --delete v4.9.3 (新版本>1.7)
git push origin :refs/tags/v4.9.3 (<1.7老版本)
错误解决
上传大文件
GitHub 提交超过 100M 的文件,需借助git-fls。
下载地址
git lfs install
git lfs track "*.iso"
git add .gitattributes
git add file.psd
git commit -m "Add design file"
git push origin master
解决方案:
1.将 Git 缓冲区大小增加到 repo 的最大单个文件大小:
git config --global http.postBuffer 157286400
2.多个大文件同时上传失败,可逐一上传。
版本冲突
error: Your local changes to the following files would be overwritten
by merge:
vue.config.js Please commit your changes or stash them before you merge.
出现这个问题的原因是其他人修改了xxx.php并提交到版本库中去了,而你本地也修改了xxx.php,这时候你进行git pull操作就好出现冲突了,解决方法,在上面的提示中也说的很明确了。
1)强制commit本地的修改 ----一般不用这种方法
2)通过git stash 保留本地的修改---- 通常用这种方法
git stash
git pull
git stash pop
通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
3)放弃本地修改 的改法 ----这种方法会丢弃本地修改的代码,而且不可找回
git reset --hard
git pull
合并分支时报错
在进行项目分支合并 git merge 时出现如下错误:
“Please enter a commit message to explain why this merge is necessary”
解决方法:
按键盘上的“i”键可进入插入模式
这时可以修改最上方的黄色部分,改成你想写的合并原因
按键盘上的“Esc”键退出插入模式
最后在最下面输入“ :wq ”后按回车键
公钥出问题了
Please make sure you have the correct access rights and the repository
exists
在git设置一下身份的名字和邮箱
git config --global user.name "yourname"
git config --global user.email "your@email.com"
删除 .ssh 文件夹【C:\Users(本地用户名).ssh】 中的 known_hosts(手动删除即可)
ssh-keygen -t rsa -C “your@email.com”(请填你设置的邮箱地址)
出现 Enter file in which to save the key (/Users/username/.ssh/id_rsa): 按回车
返回 /Users/your username/.ssh/id_rsa already exists.Overwrite (y/n)? 如果以前有存储地址输入y回车
Enter passphrase(empty for no passphrase): 如果以前没有储存地址就会出现这个,直接回车就好
运行完成时 :username/.ssh/id_rsa.pub.(注:username为你git上的用户名)中发现,已经新生成了id_rsa和id_rsa.pub两个文件
打开id_rsa.pub将全部的内容复制,到 git服务器的 “设置” > “安全设置” > “ssh公钥”
Mac上看不到.git目录
做法是:打开一个Terminal终端窗口,输入:
defaults write com.apple.finder AppleShowAllFiles TRUE
然后重启Finder,输入:
killall Finder
如果你完成了需要的操作,恢复隐藏设置,同样打开Terminal终端窗口,输入:
defaults write com.apple.finder AppleShowAllFiles FALSE
然后重启Finder,输入:
killall Finder
切换分支使用 git pull 命令,报错You are not currently on a branch
You are not currently on a branch, so I cannot use any
‘branch..merge’ in your configuration file. Please specify
which remote branch you want to use on the command line and try again
(e.g. 'git pull '). See git-pull(1) for details.
说我当前不是在分支上,因此不能 pull 或者 push
// 查看所在分支
git branch
//切换到线上的分支
git checkout -b 本地新建的分支名 origin/线上分支名
错误:Cannot do a soft reset in the middle of a merge
git reset --merge
注:取消合并
git rebase
注:将当前分支重新设置基线
vscode的git使用
合并分支
1.切换到本地开发的dev分支
2.提交代码到dev
3.切换分支 到 需要merge的test分支
先pull一下,再合并分支 — dev
4.当合并分支后,需要重新提交到远程:点击一下push,直接提交