image.png

生成rsa格式的ssh公钥、私钥

  1. #生成rsa格式的ssh公私钥,这个命令生成SSH私钥和公钥(有提示信息时,直接回车就可以了,总共三次回车)
  2. ssh-keygen -t rsa -C "7533524@qq.com"
  3. #更多参数详情
  4. ssh-keygen -t rsa -C "7533524@qq.com" [-f '路径'] [-P '密码']
  5. -t: 密钥类型, 可以选择 dsa | ecdsa | ed25519 | rsa
  6. -f: 定义密钥目录位置/文件名, 默认为当前用户 /home/.ssh/id_rsa
  7. -P: 表示空密码,添加了密码,即使私钥被盗也无法使用,加了-P参数还免回车几次。
  8. -C: 为此公钥添加指定注释, 如配置多个免密登录时,公钥附带了注释就方便多了(于公钥密钥字符串后面)
  9. #------------------- 拷贝公钥 -------------------
  10. window:
  11. "C:\Users\你自己的操作系统的用户名\.ssh" 文件下有三个文件,其中id_rsa.pub就是公钥
  12. masOS:
  13. vim ~/.ssh/id_rsa.pub #公钥
  14. cat ~/.ssh/id_rsa.pub #公钥
  15. open ~/.ssh/id_rsa #私钥
  16. Linux:
  17. vim /root/.ssh/id_rsa.pub #公钥
  18. cat /root/.ssh/id_rsa.pub #公钥
  19. vim /root/.ssh/id_rsa #私钥

image.png

配置用户名

  1. #用户名的配置格式: git config --global user.name "自定义用户名"
  2. git config user.name #这个命令查看已经配置的用户的名
  3. #邮箱的配置格式: git config --global user.email "你自己的邮箱"
  4. git config user.email #查看已经配置的邮箱
  5. git config --global user.name "Ken"
  6. git config --global user.email "7533524@qq.com"

git最常用的命令行

  1. git init
  2. git add . # 或 git add <文件>
  3. git commit -m "第一次提交代码"
  4. git remote add origin <关联远程仓库URL>
  5. git push -u origin master
  6. #克隆仓库
  7. git clone --depth=1 <远程仓库URL> [存放本地路径,不设置默认为当前目录下]
  8. #关联远程源和合并推送
  9. git init
  10. git remote add origin xxxxx.git
  11. git fetch origin
  12. git branch --set-upstream-to=origin/master master
  13. git pull origin master --allow-unrelated-histories
  14. git push -u origin master

初始化一个本地仓库

  1. git init

查看仓库目前状态

  1. #查看仓库目前状态
  2. git status

添加到git(暂存区)准备提交

  1. #添加某个文件
  2. git add <file>
  3. #把工作区所有修改添加到暂存区
  4. git add -A
  5. git add -all
  6. git add . #添加所有修改的文件到暂存区

取消暂存file

  1. git reset HEAD <file>

将文件从暂存区取出并保存到仓库

  1. git commit -m <提交的信息>

关联远程仓库URL

  1. git remote add origin <URL> #关联一个远程仓库
  2. git remote #查看远程库信息
  3. git remote -v #查看更详细的远程库信息
  4. git remote rm origin #移除关联

推送到远程仓库

  1. #语法: git push origin <分支名称>
  2. git push -u origin master
  3. git push -u origin master #第一次提交带上-u 用于把本地以前的commit推送到关联的仓库
  4. git remote rm origin

克隆仓库

  1. #普通克隆代码
  2. git clone [--depth=1] <远程仓库URL> [路径]
  3. #递归克隆代码,由于涉及到子工程,clone代码如下所示
  4. git clone --recursive https://github.com/Yuzopro/opengit_flutter.git
  5. git checkout -b master origin/master
  6. cd flutter_common_lib
  7. git checkout -b master origin/master

拉取代码

  1. git pull

分支管理

  1. #查看分支
  2. git branch
  3. git branch -r #远程跟踪分支查看
  4. #创建分支
  5. git branch <分支名>
  6. #切换分支
  7. git checkout <已经有的支名> #切换分支
  8. git checkout -b <未存在的分支名> #创建+切换分支
  9. git checkout -b origin #在本地创建和远程分支对应的分支
  10. git branch --origin/
  11. #删除分支
  12. git branch -D #强行删除
  13. git branch -d <分支名> #删除分支
  14. #合并分支
  15. git merge #合并分支到当前分支
  16. git branch --no-merged #查看所有包含未合并工作的分支
  17. git log --graph #查看分支合并图
  18. git stash #暂存工作区
  19. git stash apply #恢复工作区(不删除暂存)
  20. git stash drop #删除工作区暂存
  21. git stash pop #恢复工作区(删除暂存)
  22. git stash list #查看工作区暂存

git revert

  1. //查看提交历史
  2. $ git log -1
  3. commit 137ea95c911633d3e908f6906e3adf6372cfb0ad
  4. Merge: 5f576a9... 62db4af...
  5. Author: Nick Quaranto <nick@quaran.to>
  6. Date: Mon Mar 16 16:22:37 2009 -0400
  7. //查看提交历史
  8. $ git show d9e5f2326045181ac8f42f6c1029d0a3334580e8
  9. Merge: cbda39d88 7d46bf741
  10. Author: Ken <7533524@qq.com>
  11. Date: Fri Apr 23 20:44:20 2021 +0800
  12. Merge branch 'test_test' into feature_v3Car_0406

这时候如果执行 git revert commitId ,会提示如标题的错误

  1. 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
  2. error: commit d9e5f2326045181ac8f42f6c1029d0a3334580e8 is a merge but no -m option was given.
  3. fatal: revert failed
  4. 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 .. git cherry-pick ^.. 前者表示把到之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支; 后者有”^”标志的表示把到之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。

  1. <a name="SWm4x"></a>
  2. #### git tag 标签
  3. ```c
  4. #查看、列出标签
  5. git tag
  6. #创建标签
  7. git tag -a <tagname> -m <说明>
  8. git tag -a v1.0.0 -m fab洲博通版本v1.0.0
  9. #删除标签
  10. git tag -d <tagname>
  11. #推送所有标签
  12. git push --tags

git fetch和git pull的区别

  1. #Git fetch:只是从远程获取最新版本到本地,不会merge(合并)
  2. git fetch origin master #从远程的origin的master主分支上获取最新版本到origin/master分支上
  3. git log -p master..origin/master #比较本地的master分支和origin/master分支的区别
  4. git merge origin/master #合并
  5. #Git fetch:从远程获取最新版本并merge(合并)到本地
  6. git pull origin master #相当于进行了 git fetch 和 git merge两部操作

git fork 别人代码后与其同步更新

  1. git remote -v #首先是否建立了主repo的远程源
  2. git remote add main https://github.com/quark-ui/quark-ui.git #那就需要添加主repo的源,后边的仓库地址,就是fork 别人的仓库地址
  3. git fetch main master
  4. git merge main/master #两步合并变化
  5. #如果要删除 upstream,git remote rm [本地别名],如:
  6. #git remote rm main

git在本地创建共享仓库

  1. mkdir -p /home/admin/git/KimGuBa && cd $_
  2. git init #初始化仓库
  3. cat "git在本地创建共享仓库" >> README.md
  4. useradd kim
  5. passwd kim #为用户git创建、修改密码
  6. #客户端拉取使用:安装git后初次输入「用户、密码」
  7. #git@主机地址:<仓库地址 在存放的地址下pwd可以输入当前仓库绝对路径的地址>
  8. git clone --depth=1 git@119.23.72.172:/home/admin/app/repository_git
  9. #客户端免密码登录
  10. 【客户端操作】
  11. ssh-keygen
  12. #ssh-keygen -t rsa -C "7533524@qq.com"
  13. cat ~/.ssh/id_rsa.pub
  14. 【在主机中操作】
  15. #切换git用户
  16. su - git
  17. #输入一下命令查找配置ssh公钥的路径,可以得到 .ssh/authorized_keys
  18. cat /etc/ssh/sshd_config |grep AuthorizedKeysFile
  19. #把客户端的ssh公钥存放进来
  20. vim .ssh/authorized_keys

报错:error: You have not concluded your merge (MERGE_HEAD exists)

解决1:保留本地的更改,中止合并->重新合并->重新拉取

  1. git merge --abort
  2. git reset --merge
  3. git pull

解决办法二:舍弃本地代码,远端版本覆盖本地版本(慎重)

  1. git fetch --all
  2. git reset --hard origin/master
  3. git fetch

解决:git文件大小写问题

  1. git config core.ignorecase false

error:RPC failed; curl 18 transfer closed with outstanding read data remain

  1. error: RPC failed; curl 18 transfer closed with outstanding read data remaining
  2. fatal: The remote end hung up unexpectedly
  3. fatal: early EOF
  4. fatal: index-pack failed

出现的原因是因为 curl 的 postBuffer 的默认值太小,需要在终端重新它的配置大小
在这里,我把postBuffer的值设成500M,你可以根据需要下载的文件大小,将postBuffer值设置合适大小

  1. git config --global http.postBuffer 524288000

在终端输入上面命令回车后就配置完成了,你可以根据以下命令查看postBuffer设置的大小。

  1. git config --list