git/常用操作

226 阅读7分钟

学习资料

一、本地分支操作

查看所有分支

git branch -a 			//常看所有分支

切换分支

git checkout name(分支名称) 	//切换到分支name
git checkout -b 本地分支名 origin/远程分支名  // 切换远程分支

新建分支

git checkout x 		//切换到x这个分支,
git checkout -b s 	//然后以x这个分支新建一个s分支

git log // 查看所有的commitID
git checkout -b newbranch commintId // 基于某个commit新建分支

删除分支

git checkout master 
git branch -d a	            //第一步删除本地分支a
git push origin --delete a  //第二步删除远程分支a

本地分支更新远程代码

git checkout x 
git add .
git commit -m "x的代码"
git push origin 
git pull origin		

本地分支dev合并到mater上

git checkout dev
git add .
git commit -m "合并"
git git push origin
git checkout master
git pull 
git merge dev			
git push origin			//本地x分支合并到master上

多个commitId在合并的时候变成一个commitId

# 将远程仓库adminTemplate上的master分支合并到当前项目的分支, 
# merge --squash 的意思是:将远程仓库adminTemplate/master分支的多个commitId记录合并成一个commitId,然后再合并到当前项目的分支上。 
# --allow-unrelated-histories 的意思是允许不同的项目进行合并
git merge --squash adminTemplate/master --allow-unrelated-histories

本地分支修改切换其他分支但不想commit

// 当前分支a
git add .
git stash  // 暂存
git checkout master // 切换到master分支
git checkout a  // 切回
git stash list // 查看暂存了多少个
git stash pop // 将最近暂存的出栈

二、代码提交 步骤

git pull origin 分支名

git add .

git commit -m "message"

git push origin 分支名

message规范信息介绍

使用husky添加校验,提交代码commit必须形如 git commit -m "feat: xxx"

typetype
feat新增功能
fix修复bug
docs修改文档
refactor代码重构,未新增任何功能和修复任何bug
build改变构建流程,新增依赖库、工具等(例如webpack修改)
style仅仅修改了空格、缩进等,不改变代码逻辑
perf改善性能和体现的修改
chore非src和test的修改
test测试用例的修改
revert回滚到上一个版本
ci自动化流程配置修改

三、合并分支到master上 步骤

git checkout master

git merge 分支名

代码 提交

四、打标签

查看标签
git tag

创建标签
git tag -a v1.0 -m "创建标签的备注信息"

参考资料

五、撤销操作

  1. 未进行任何提交,即没有使用add命令,文件更改在工作区。
git checkout -- filename // filename 对应进行操作的文件名

2. 已用git add 命令提交,即文件更改在暂存区

git reset HEAD filename // 舍弃filename文件的更改

git reset --hard HEAD   // 舍弃所有文件的更改

3. 已用git add 和git commit 提交,即文件更改在分支

git reset --hard HEAD^ // 完全舍弃最后一次更改

git reset --soft HEAD^ // 舍弃更改至缓存区,即回到第2种情况

git reset HEAD^        // 舍弃更改至工作区,即回到第1种情况

4. 需要删除文件

git rm filename          //删除所有
git rm --cached filename //仅在工作区保留

5. 本地分支上面,有A分支和B分支,现在A分支merge了B分支,现在后悔想撤回了。

第一步:在远程仓库上查看A分支最新的commit记录 image.png 第二步:本地切换到A分支

git checkout A

第三步:查找对应的A分支最新的commit记录,确认为远程A分支最新的commitId,

git reflog

image.png

第四步:撤回

git reset --hard 448c9fb(从git reflog获取)

6. 远程分支需要回退到固定的commit,舍弃之前的提交

# 切换到对应分支
git checkout 分支
# 获取到要回退的commit id
git log 
# 回退
git reset --hard commitId
# 强制提交
git push --force

六、服务器重置后本地git连接服务器

ssh-keygen -R 106.xx.xxx.xxx

七、本地git连接服务器

ssh root@106.xx.xxx.xxx

root:为服务器账户名

八、高效的在github上查找项目

in:name 爬虫 //搜索名字中带有"爬虫"in:readme 爬虫 //搜索readme中带有"爬虫"in:description 爬虫 //搜索描述中带有"爬虫"stars:>1000 //搜索stars>1000forks:>1000 //搜索forks>1000pushed:>2019-09-01 //搜索最近更新于201991日之后的
language:Python //搜索Python的项目

九、git上次出现端口被占用、拒绝的错误。

例如:Failed to connect to 127.0.0.1 port 1081: Connection refused

解决方法:打开.gitconfig文件,删除里面的proxy字段即可。

参考文章:www.jianshu.com/p/13099813f…

十、git push每次都需要登录账号密码

解决方法:jingyan.baidu.com/article/4b0…

十一、github网址打开很慢

zhuanlan.zhihu.com/p/93436925

十二、创建公司git和个人git

1. 生成多个不同的sshkey秘钥

如果在创建的过程中,对密钥的读取设置了密码,则后面进行代码推拉操作的时候,都需要当时设置的密码,建议直接回车,不设置。

生成新的tc_pub公钥与私钥

#mac
ssh-keygen -t rsa -C "公司用的邮箱@xxx.com" -f ~/.ssh/inke_rsa

#window
在c:\users\你当前的用户名 打开终端
如果没有.ssh文件夹,则在这个路径下创建,进入当前的.ssh文件夹
执行如下终端命令
ssh-keygen -t rsa -C "公司的邮箱@xxx.com" -f ./git_rsa

查看

ls ~/.ssh

image.png

记得根据自己创建的一对钥匙给gitlab添加公钥

cat ~/.ssh/id_rsa.pub

copy 内容到git上的ssh里面,如:

image.png

2. 在.ssh目录下新建一个config(无后缀文件)

这个文件的使用就是,当你clone远程仓库的时候,git会去找查找这个文件,根据这个文件的内容,将私钥与github上配置的公钥进行匹配,如果匹配成功,则允许你进行代码clone或者提交等操作。

// window系统操作(.ssh目录一般在C:/Users/你当前的用户/.ssh目录)
# 个人account
# 解释说明:
# Host,HostName gitlab或者github上的域名
# User 提交commit记录时,你的名称
# IdentityFile 进行gitlab链接时的密钥(密码)
Host github.com
HostName github.com
User git_phxxhp
IdentityFile C:/Users/你的用户名称/.ssh/git_rsa
IdentitiesOnly yes

# 公司account

Host xx.xxx.xx
HostName xx.xxx.xx
User inke_phxxhp

IdentityFile C:/Users/Administrator/.ssh/inke_rsa
IdentitiesOnly yes
// max系统操作 
cd ~/.ssh
touch config
vim config

# 个人account

Host github.com
HostName github.com
User git_phxxhp
IdentityFile ~/.ssh/id_rsa_github

# 公司account

Host code.inke.cn
HostName code.inke.cn
User inke_phxxhp
IdentityFile  ~/.ssh/id_rsa

3. 测试链接

这是尝试用config文件去访问git远程仓库,访问的逻辑与上面一致。

ssh -T git@github.com 
ssh -T git@公司访问gitlab的域名

image.png

4. 设置全局username和email

设置公司的git为全局的username和email

git config --global user.name "inke_phxxhp"
git config --global user.email "xiaoxu@inke.cn"

设置这些配置项有以下作用:

  1. 作者信息: 在 Git 提交中,每次提交都会记录作者的信息,其中包括作者的姓名和邮箱。设置 user.email 项就是为了在每次提交中标识作者的邮箱。
  2. 身份验证: 有些 Git 服务器在进行操作时需要进行身份验证,而用户的邮箱通常是其中的一部分。通过设置用户邮箱,你可以确保你的 Git 操作被正确归属到你的身份。

5、clone个人git项目

进入工程目录后,需要设置个人的username和email,然后再进行其他操作。

git config --list // 查看当前电脑的git所有账户信息
git config user.name "git_xiaoxu"
git config user.email "xiaoxu@qq.com"

6、检验公司git与个人git是否成功

clone公司项目,分别进入该公司项目目录和个人项目目录后查看用户信息

git config user.name

公司项目的user.name为:inke_xiaoxu

个人项目的user.name为:git_xiaoxu

十三、对比两个commit

git log 
git diff commit1 commit2

十四、一个项目多添加一个远程仓库

如果远程仓库是别的项目,也就是密钥不对,则需要额外创建一个,参考十二、创建公司git与个人git

回到项目

git remote add bitbucket gitUrl(远程仓库的url地址)

查看是否添加成功

git remote -v 

image.png

拉与推另外一个远程仓库的代码

git pull bitbucket # 拉
git push bitbucket # 推

十五、将a分支中的某个commit合并到b分支

cherry-pick教程

git checkout a
git log 
# 选择a分支里面要合并到b分支的commit id: acbd 复制
git checkout b
git cherry-pick abcd
git push