- 生成rsa格式的ssh公钥、私钥
- 配置用户名
- git最常用的命令行
- 初始化一个本地仓库
- 查看仓库目前状态
- 添加到git(暂存区)准备提交
- 取消暂存file
- 将文件从暂存区取出并保存到仓库
- 关联远程仓库URL
- 推送到远程仓库
- 克隆仓库
- 拉取代码
- 分支管理
- git revert
- git cherry-pick
- git fetch和git pull的区别
- git fork 别人代码后与其同步更新
- git在本地创建共享仓库
- 报错:error: You have not concluded your merge (MERGE_HEAD exists)
- 解决:git文件大小写问题
- error:RPC failed; curl 18 transfer closed with outstanding read data remain
生成rsa格式的ssh公钥、私钥
#生成rsa格式的ssh公私钥,这个命令生成SSH私钥和公钥(有提示信息时,直接回车就可以了,总共三次回车)
ssh-keygen -t rsa -C "7533524@qq.com"
#更多参数详情
ssh-keygen -t rsa -C "7533524@qq.com" [-f '路径'] [-P '密码']
-t: 密钥类型, 可以选择 dsa | ecdsa | ed25519 | rsa
-f: 定义密钥目录位置/文件名, 默认为当前用户 /home/.ssh/id_rsa
-P: 表示空密码,添加了密码,即使私钥被盗也无法使用,加了-P参数还免回车几次。
-C: 为此公钥添加指定注释, 如配置多个免密登录时,公钥附带了注释就方便多了(于公钥密钥字符串后面)
#------------------- 拷贝公钥 -------------------
window:
"C:\Users\你自己的操作系统的用户名\.ssh" 文件下有三个文件,其中id_rsa.pub就是公钥
masOS:
vim ~/.ssh/id_rsa.pub #公钥
cat ~/.ssh/id_rsa.pub #公钥
open ~/.ssh/id_rsa #私钥
Linux:
vim /root/.ssh/id_rsa.pub #公钥
cat /root/.ssh/id_rsa.pub #公钥
vim /root/.ssh/id_rsa #私钥
配置用户名
#用户名的配置格式: git config --global user.name "自定义用户名"
git config user.name #这个命令查看已经配置的用户的名
#邮箱的配置格式: git config --global user.email "你自己的邮箱"
git config user.email #查看已经配置的邮箱
git config --global user.name "Ken"
git config --global user.email "7533524@qq.com"
git最常用的命令行
git init
git add . # 或 git add <文件>
git commit -m "第一次提交代码"
git remote add origin <关联远程仓库URL>
git push -u origin master
#克隆仓库
git clone --depth=1 <远程仓库URL> [存放本地路径,不设置默认为当前目录下]
#关联远程源和合并推送
git init
git remote add origin xxxxx.git
git fetch origin
git branch --set-upstream-to=origin/master master
git pull origin master --allow-unrelated-histories
git push -u origin master
初始化一个本地仓库
git init
查看仓库目前状态
#查看仓库目前状态
git status
添加到git(暂存区)准备提交
#添加某个文件
git add <file>
#把工作区所有修改添加到暂存区
git add -A
git add -all
git add . #添加所有修改的文件到暂存区
取消暂存file
git reset HEAD <file>
将文件从暂存区取出并保存到仓库
git commit -m <提交的信息>
关联远程仓库URL
git remote add origin <URL> #关联一个远程仓库
git remote #查看远程库信息
git remote -v #查看更详细的远程库信息
git remote rm origin #移除关联
推送到远程仓库
#语法: git push origin <分支名称>
git push -u origin master
git push -u origin master #第一次提交带上-u 用于把本地以前的commit推送到关联的仓库
git remote rm origin
克隆仓库
#普通克隆代码
git clone [--depth=1] <远程仓库URL> [路径]
#递归克隆代码,由于涉及到子工程,clone代码如下所示
git clone --recursive https://github.com/Yuzopro/opengit_flutter.git
git checkout -b master origin/master
cd flutter_common_lib
git checkout -b master origin/master
拉取代码
git pull
分支管理
#查看分支
git branch
git branch -r #远程跟踪分支查看
#创建分支
git branch <分支名>
#切换分支
git checkout <已经有的支名> #切换分支
git checkout -b <未存在的分支名> #创建+切换分支
git checkout -b origin #在本地创建和远程分支对应的分支
git branch --origin/
#删除分支
git branch -D #强行删除
git branch -d <分支名> #删除分支
#合并分支
git merge #合并分支到当前分支
git branch --no-merged #查看所有包含未合并工作的分支
git log --graph #查看分支合并图
git stash #暂存工作区
git stash apply #恢复工作区(不删除暂存)
git stash drop #删除工作区暂存
git stash pop #恢复工作区(删除暂存)
git stash list #查看工作区暂存
git revert
//查看提交历史
$ git log -1
commit 137ea95c911633d3e908f6906e3adf6372cfb0ad
Merge: 5f576a9... 62db4af...
Author: Nick Quaranto <nick@quaran.to>
Date: Mon Mar 16 16:22:37 2009 -0400
//查看提交历史
$ git show d9e5f2326045181ac8f42f6c1029d0a3334580e8
Merge: cbda39d88 7d46bf741
Author: Ken <7533524@qq.com>
Date: Fri Apr 23 20:44:20 2021 +0800
Merge branch 'test_test' into feature_v3Car_0406
这时候如果执行 git revert commitId ,会提示如标题的错误
git --no-optional-locks -c color.branch=false -c color.diff=false -c color.status=false -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree revert --no-edit d9e5f2326045181ac8f42f6c1029d0a3334580e8
error: commit d9e5f2326045181ac8f42f6c1029d0a3334580e8 is a merge but no -m option was given.
fatal: revert failed
Completed with errors, see above
对于revert merge的情况,程序员需要指出revert 这个merge commit中的哪一个。通过 -m 或者 —mainline 参数,以及配合一个整数参数,git就知道到底要revert哪一个merge。
- 使用 git revert [commitId] -m 1 会revert第一个commit,也就是 cbda39d88
- 使用 git revert [commitId] -m 2 会revert第二个commit,也就是 7d46bf741
上面的两个 commitId 在提交历史中也可以看到。
git cherry-pick
git cherry-pick 命令,也叫 遴选 或者 摘取,目的是把一个分支里面的某次提交,合并到另一个分支里面
git cherry-pick 可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,
- 假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱
- 但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交
```java
git cherry-pick
:单独合并一个提交 git cherry-pick -x :同上,不同点:保留原提交者信息。
git cherry-pick
<a name="SWm4x"></a>
#### git tag 标签
```c
#查看、列出标签
git tag
#创建标签
git tag -a <tagname> -m <说明>
git tag -a v1.0.0 -m fab洲博通版本v1.0.0
#删除标签
git tag -d <tagname>
#推送所有标签
git push --tags
git fetch和git pull的区别
#Git fetch:只是从远程获取最新版本到本地,不会merge(合并)
git fetch origin master #从远程的origin的master主分支上获取最新版本到origin/master分支上
git log -p master..origin/master #比较本地的master分支和origin/master分支的区别
git merge origin/master #合并
#Git fetch:从远程获取最新版本并merge(合并)到本地
git pull origin master #相当于进行了 git fetch 和 git merge两部操作
git fork 别人代码后与其同步更新
git remote -v #首先是否建立了主repo的远程源
git remote add main https://github.com/quark-ui/quark-ui.git #那就需要添加主repo的源,后边的仓库地址,就是fork 别人的仓库地址
git fetch main master
git merge main/master #两步合并变化
#如果要删除 upstream,git remote rm [本地别名],如:
#git remote rm main
git在本地创建共享仓库
mkdir -p /home/admin/git/KimGuBa && cd $_
git init #初始化仓库
cat "git在本地创建共享仓库" >> README.md
useradd kim
passwd kim #为用户git创建、修改密码
#客户端拉取使用:安装git后初次输入「用户、密码」
#git@主机地址:<仓库地址 在存放的地址下pwd可以输入当前仓库绝对路径的地址>
git clone --depth=1 git@119.23.72.172:/home/admin/app/repository_git
#客户端免密码登录
【客户端操作】
ssh-keygen
#ssh-keygen -t rsa -C "7533524@qq.com"
cat ~/.ssh/id_rsa.pub
【在主机中操作】
#切换git用户
su - git
#输入一下命令查找配置ssh公钥的路径,可以得到 .ssh/authorized_keys
cat /etc/ssh/sshd_config |grep AuthorizedKeysFile
#把客户端的ssh公钥存放进来
vim .ssh/authorized_keys
报错:error: You have not concluded your merge (MERGE_HEAD exists)
解决1:保留本地的更改,中止合并->重新合并->重新拉取
git merge --abort
git reset --merge
git pull
解决办法二:舍弃本地代码,远端版本覆盖本地版本(慎重)
git fetch --all
git reset --hard origin/master
git fetch
解决:git文件大小写问题
git config core.ignorecase false
error:RPC failed; curl 18 transfer closed with outstanding read data remain
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
出现的原因是因为 curl 的 postBuffer 的默认值太小,需要在终端重新它的配置大小
在这里,我把postBuffer的值设成500M,你可以根据需要下载的文件大小,将postBuffer值设置合适大小
git config --global http.postBuffer 524288000
在终端输入上面命令回车后就配置完成了,你可以根据以下命令查看postBuffer设置的大小。
git config --list