官网文档: https://git-scm.com/doc
本地同步全量历史数据,克隆所有文件的历史记录
本地同步默认分支最近n
次的commit信息,克隆默认分支master最近一次commit
本地同步指定分支最近n
次的commit信息,克隆dev分支最近一次commit
第三种方式克隆下来只存在指定的分支,如果想要切换分支,使用下面的命令👇
git remote set-branches origin 'remote_branch_name'
git fetch --depth 1 origin remote_branch_name
git checkout remote_branch_name
git shortlog -sn
git blame [file]
eg: git blame README.md
Git 中的分支是指向提交的指针,是从特定时间点开始的项目及其更改的快照。
git branch -d local_branch_name
将远端分支拉取到本地(本地切换到远程分支,存在远端分支,需要在本地)
git checkout -b dev origin/dev
将本地新建的分支与远程分支相关联(在当前分支下输入以下命令)
git branch -u origin/分支名
其中origin/xxx xxx为远程分支名
eg: git branch -u origin/master 本地分支关联远程master分支 或者使用 git branch --set-upstream-to origin/xxx 同样可以关联
git branch -vv
git branch --unset-upstream
git checkout master # 切换到master分支上
git pull origin master # 把远程分支pull下去,及时更新
git merge dev # 把dev分支的代码合并到master上
git status # 查看状态
git push origin master # push到远程分支
因为Git
本身是分布式版本控制系统,可以同步到另外一个远程库,当然也可以同步到另外两个远程库。
使用多个远程库时,我们要注意,git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库, 具体操作步骤如下:
origin
的远程库:git remote rm origin
GitHub
的远程库:git remote add github git@github.com:all-smile/pc-web.git
注意: 远程库的名称叫github,不叫origin了。
Gitee
的远程库:git remote add gitee git@gitee.com:hey-u/pc-web.git
同样注意,远程库的名称叫gitee,不叫origin。
git remote -v
gitee git@gitee.com:hey-u/pc-web.git (fetch)
gitee git@gitee.com:hey-u/pc-web.git (push)
github git@github.com:all-smile/pc-web.git (fetch)
github git@github.com:all-smile/pc-web.git (push)
git push github master
git push gitee master
也可以在使用NPM
包管理工具的项目添加如下scripts
脚本
"scripts": {
"pull": "git pull github master && git pull gitee master",
"push": "git push github master && git push gitee master"
},
拉取/推送的时候使用
npm run pull
npm run push
git remote -v
origin https://github.com/USERNAME/REPOSITORY.git(fetch)
origin https://github.com/USERNAME/REPOSITORY.git(push)
git remote set-url
命令将远程的 URL 从 HTTPS 更改为 SSH。git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
git remote -v
origin git@github.com:USERNAME/REPOSITORY.git (fetch)
origin git@github.com:USERNAME/REPOSITORY.git (push)
git remote -v
origin git@github.com:USERNAME/REPOSITORY.git (fetch)
origin git@github.com:USERNAME/REPOSITORY.git (push)
git remote set-url
命令将远程的 URL 从 SSH 更改为 HTTPS。git remote set-url origin https://github.com/USERNAME/REPOSITORY.git
git remote -v
origin https://github.com/USERNAME/REPOSITORY.git (fetch)
origin https://github.com/USERNAME/REPOSITORY.git (push)
这里牵涉到提交代码的一些数据统计,了解一下会很有帮助的,可以看下我的这篇文章: 👉语雀:github/gitlab/gitee 个人主页无法统计提交记录
后来有次居家办公,跟同事公用一台虚桌,为了把一些“数据”做的好看些,不得不切换本地的ssh配置。发现gitlab上代码的数据统计采集数据的方式应该不唯一,具体描述如下:
如何查看".gitconfig"文件
在"Git Bash"命令行工具中输入“cd && ls -a”便可以看到如下信息 再通过“view .gitconfig”命令打开.gitconfig文件,即可查看该配置文件内容:
git config --global core.quotepath false
git config --global core.pager more
git tag -a <tagname:v1.0.0> -m "标签描述"
# 将tag显示的推送到远程仓库
git push origin v1.0.0
#-------------------
# 打 tag (tag指向commit ID)
git tag -a <tagname:v1.0.0> -m "标签描述"
eg: git tag -a v1.0.0 -m "test"
# 推送tag
git push github v1.0.0
git push gitee v1.0.0
# 获取tag
git tag
# 删除本地`tag`
git tag -d 标签名
eg:git tag -d v3.1.0
# 删除远程`tag`
git push origin :refs/tags/标签名
eg:git push origin :refs/tags/v3.1.0
有副作用,一般的做法是删除 tag, 重新打,或者递增tag值
git tag -a -f <tag名称> <新的commit ID>
如果想进一步设置代码的书写规范,请看这里:👉perttier+eslint+husky 使用
git pull 的时候报错 拒绝合并无关历史记录 粗暴解决:
使用强制命令
git pull origin master --allow-unrelated-historie
ssh-keygen -o -t rsa -C "your.email@example.com" -b 4096
一路回车
cat ~/.ssh/id_rsa.pub | clip
3.登录gitlap配置公钥
"terminal.integrated.shell.windows": "填写获取到的bash路径", "terminal.integrated.automationShell.windows": "填写获取到的bash路径"
where bash 命令在安全账户(多账户下)有兼容问题 去掉usr路径 D:/Git/usr/bin/bash.exe -> D:/Git/bin/bash.exe
git config --global user.name "xxx"
git config --global user.email "xxx@123.com"
git config --global core.autocrlf false // 不同平台mac/windows/linux下换行符(\n, \r\n, \r)不一致的问题
git config --global core.longpaths true
git config --global core.quotepath false
git config --global i18n.logoutputencoding utf-8
git config --global i18n.commitencoding utf-8
git config --global gui.encoding utf-8
echo "export LANG=zh_CN.UTF-8" >> ~/.bash_profile
echo "export LESSCHARSET=UTF-8" >> ~/.bash_profile
参考我的另一篇:👉Delete ␍
eslint(prettier/prettier) 错误的解决方案
上面的都是通过规范个人的行为来保持版本库的统一,但团队开发中还是会有人不遵守规范,导致出现一些问题,所以最终的处理方案应该是跟随项目提供一个配置文件(👉.gitattributes),并且给以最高的优先级(像eslint配置一样),👉gitattributes这里提供了一系列针对各种开发环境,已经写好了的 ``.gitattributes` 文件。
Windows | Linux/Mac | Old Mac(pre-OSX) |
---|---|---|
CRLF | LF | CR |
'\n\r' | '\n' | '\r' |
Windows 提交时转换为LF,检出时转换为CRLF
git config --local core.autocrlf true
这时候在执行ssh-keygen -o -t rsa -C "your.email@example.com" -b 4096
命令的时候就不能默认回车了
可以修改生成key的文件名,默认文件名是id_rsa
,生成多个不同文件命名的key
就可以添加使用了。
不同的代码仓库平台可以采用设置
ssh config
的方式,可以参考👉常用的SSH,你了解多少?自己尝试一下
配置ssh config
# gitcode - csdn
Host gitcode.net
HostName gitcode.net
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitcode
# gitlab
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab-rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# 公共配置
# Host *
# key value
# 其它密钥对说明
# 18143945157 : github-cli 使用的
# gh-pages : hexo deploy_key 设置
再次测试连接
ssh -T git@gitlab.com
ssh-keygen -R 你要访问的IP地址
ssh-keygen -R git@gitlab.com:all-smile/gitbook.git
Host git@gitlab.com:all-smile/gitbook.git not found in /c/Users/xiao/.ssh/known_hosts
修改 known_hosts 的文件名字,也就是让它不起作用。(host)
重新clone ,生成新的 known_hosts
ping gitlab.com
git commit --amend
然后再vim编辑器里面(具体以什么方式打开要看git bash的配置,可以配置成 notepad++
, 或者使用 Git Extensions
)修改保存即可
git push
变基到指定的commit-id版本, 并进入到一个可编辑的界面。在编辑区顶部,会列出这次 rebase 操作所涉及的所有 commit 提交记录的摘要,它们每一行默认都是以 pick 开头的。找到你想要修改的那个 commit,将行首的 pick 关键字修改为 edit。然后保存并退出。这么做可以在执行和指定 commit 有关的 rebase 操作时暂停下来让我们对该 commit 的信息进行修改
如果需要修改多个提交记录的信息,则重复执行 2、3步骤,直到出现以下输出:
git rebase --continue
Successfully rebased and updated refs/heads/develop
到这里已经完成了变基操作的所有节点,
git log
命令查看我们刚才的修改情况,确认已修改的内容和预期一致。
工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下
git reset --soft|--mixed|--hard <commit_id>
git push develop develop --force (本地分支和远程分支都是 develop)
--mixed
为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。只是将git commit和index 信息回退到了某个版本。
--soft
保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可。
git reset --soft HEAD
--hard
参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。
对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上线下代码保持一致,你要用到下面的命令
git revert <commit_id>
revert
之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新。
git revert是用一次新的commit来回滚之前的commit
可以使用 ~数字表示
我是 甜点cc☭
微信公众号:【看见另一种可能】
专注前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。