工具 · Git 使用

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,直接提交

参考

Git教程 - 廖雪峰的官方网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值