Skip to content

git基本使用

开始

text
git config --global user.name xxx
git config --global user.email xxx
npm set init-author-name longmo
npm set init-author-email '3131521901@qq.com'
npm set init-author-url 'http://yourdomain.com'
npm set init-license 'MIT'

基本命令

git checkout -b xxx : 创建分支并切换到分支xxx git status : 查看当前分支状态 git add . : 将新添加的文件加入暂存区 git commit -am “注释” :添加并提交所有修改文件 git merge xxx : 将xxx(本地)分支的代码合并到当前分支 git pull : 从远端获取, 或git pull origin xxx(分支名) git push : 更新到远端, 或git push origin xxx(分支名) git add filename : 添加未跟踪的文件到暂存区 git add . : 添加所有未跟踪的文件到暂存区 git log : 日志

git fetch

git fetch 命令从远程仓库获取最新的代码到本地,但不会自动合并代码。

sh
git fetch <remote> <branch>

示例:从名为 origin 的远程仓库获取最新代码:

sh
git fetch origin

git merge

git merge 相信大家不陌生,就是将另一个分支的更改合并到当前分支。

通常在使用 git fetch 获取了最新的远程更改后,使用 git merge 将这些更改合并到当前分支。

sh
git merge <branch>

git pull

当我们执行git pull的时候,相当于以此执行了

git fetch :从云端拉取最新代码

git merge:将云端代码与本地代码合并

git pull为什么会导致git历史混乱

使用rebase变基后,git永远只有一条线性历史,非常直观。 我们只需要在git pull的时候,添加上额外命令即可! git pull --rebase

自动变基

每次提交代码都使用git pull --rebase命令繁琐而且容易出错,我们可以全局设置git pull默认使用变基的方式,一劳永逸!

sh
// git pull默认使用变基操作
git config --global pull.rebase true

如果你还是执意喜欢merge,那么使用下面的命令

sh
// git pull默认使用合并操作
git config --global pull.rebase false

提示

自动变基的问题

自动变基会面临一个额外的问题:就是如果你本地文件有更改的话,变基会失败,因为变基前服务区必须是干净的。

有两种方法解决这个问题

  1. git pull前,先使用git commit暂存代码
  2. git pull前,先将使用 git stash将保存

冲突问题

如果使用git pull有冲突,则合并完冲突之后,执行一下 git rebase --continue 就好了

https://mp.weixin.qq.com/s/n1KbNaT46SwVPCBxpW31ow

使用合并流程

[master下]创建分支: git checkout -b xxx [分支下] 开发代码并不断commit, 开发完毕 [分支下] 切换到master: git checkout master [master下] 更新代码: git pull [master下] 切换到分支xxx: git checkout xxx [分支下] 合并master到分支: git merge master [分支下] 切换master: git checkout master [master下] 合并分支xxx到master: git merge xxx [master下] 更新到远端 git push

分支命名

建议采用git-flow规范:

新项目,新功能: feature/xxx 快速更改,修复bug: hotfix/xxx

注意事项

windows下客户端: sourcetree(注册需翻墙), tortoiseGit, mac下客户端: sourcetree, tower master分支尽量不要进行耗时项目开发,远端master要保持随时可以上线版本 push之前要先pull 所有命令操作都在根目录下执行。 不建议单文件commit, 每次commit都是提交当前所有的修改

alias 别名

使用命令行的同学可以在git bash里 vi ~/.gitconfig, 将下面别名加入文件末尾:

text
[alias]
     cm = commit
     co = checkout
     ac = !git add -A && git commit
     st = status -sb
     tags = tag -l
     branches = branch -a
     cleanup = git config --global alias.cleanup "git branch --merged | grep -v '*' | xargs git branch -d"
     remotes = remote -v
     lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --

Git Tag

git tag -a v1.2.0 -m "此处为注解信息version: 1.2.0" git push origin v1.2.0 git push origin --tags

remote:error:File:××× exceeds 100.00 MB. ⋯\cdots⋯ remote:Please remove the file from history and try again.

问题:上传文件超出远程仓库的限制 解决: 方案一:撤销上一次 commit,会退到上一次 commit 前的状态,然后移除超出限制的文件,重新上传。 git reset HEAD^ # 撤销上一次 commit 【注意事项】 若不小心错误回退到上次版本,需要撤销 reset 操作,则可以使用以下代码查看 git HEAD 变化的历史记录。 git reflog 然后使用 git reset 回退到的历史记录: git reset XXX # XXX 为想要会退到的历史记录的 HEAD 当然,这种方法也能解决上传文件超出远程仓库的限制而导致的上传失败问题。

使用webstorm的话,直接点击删除提交即可

方案二:删除大文件的提交记录。 首先根据报错提示的记录 id(此处以 c95128eee48b004a21ff94a3268615141e157e3c 为例)查询该大文件的路径:

bash
git rev-list --objects --all | grep c95128eee48b004a21ff94a3268615141e157e3c

得到该大文件路径为 data/data.mp4 。

然后将该文件从历史记录中删除:

bash
git log --pretty=oneline --branches -- modules/electron-v30.0.0-win32-x64.zip

最后重写所有的提交:

sh
git filter-branch --index-filter 'git rm --cached --ignore-unmatch modules/electron-v30.0.0-win32-x64.zip' -- --all

fatal: unable to checkout working tree. warning: Clone succeeded, but checkout failed.

问题:成功 Clone,但是目录下的文件并没有恢复,原因在于目录中存在文件名不符合规范的文件。 解决:对于由于长文件名导致的问题,可以修改 git 配置:

sh
git config --system core.longpaths true
git config --global core.longpaths true

对于由于文件名中存在非法字符,需要修改远程仓库的文件名后在重新 pull 一下。

【注】windows 下的文件名要求:文件名、文件夹名不能包括的符号 \、/、:、*、?、"、<、>、|

fatal: unable to access 'xxx': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

问题:仓库网站证书有问题,无法通过验证。 比如最近 2021 年 9 月 30 日,Let’s Encrypt 组织使用的 IdentTrust DST Root CA X3 根证书过期,因此很多使用了 Let’s Encrypt 签发的证书但没有及时更新证书的网站都受到了影响。

解决:在 git clone 时不启用证书验证:

sh
GIT_SSL_NO_VERIFY="true" git clone xxx

Git 生成 key 密钥

1.设置用户名

git config --global user.name 'longmo'

2.设置用户名邮箱

git config --global user.email '3131521901@qq.com'

3.查看设置

git config --list

4.生产publickey 连续三次回车即可

ssh-keygen -t rsa -C "3131521901@qq.com"

ssh-keygen -t ssh-ed25519 -C "3131521901@qq.com"

问题:

  1. Disconnected: No supported authentication methods available(server sent: publickey) 的解决办法

解决:

https://blog.csdn.net/Hello_World_QWP/article/details/82216345

Contributors

作者:Long Mo
字数统计:1.7k 字
阅读时长:6 分钟
Long Mo
文章作者:Long Mo
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Longmo Docs