likes
comments
collection
share

我在工作中使用Git的心得以及常见问题的解决

作者站长头像
站长
· 阅读数 58

1. 如何将本地项目上传到远程仓库

场景:搭建项目之初,一般都是先在本地写个demo,一步一步逐渐完善,但是往往经常写的告一段落之后需要借助git工具进行留存,这个时候就需要将本地项目上传到远程仓库。

实现:

  1. 现在github建立一个空的仓库,然后找到仓库地址
  2. 在本地项目的根目录下执行如下命令
# 初始化git
git init 
# 提交项目全部内容
git add .
# 将提交的内容暂存
git commit -m "创建项目"
# 关键步骤,将本地仓库和远程仓库关联
git remote add origin https://gitee.com/vue3-series/vue3-todolist.git : 
# 推送到远程master分支
git push -u origin master 

2. 如何追加当前的修改到最新一次commit

场景:一个功能开发完成之后,发现自己有遗漏的提交,或者每次迭代只想提交一个commit,那么就可以把本次迭代的全部内容分次提交到一起,就可以通过这种方式,这样可以节省最后整理以及合并提交记录的时间,

实现:

  1. 一个功能的开发,首次提交就把commit提交记录写好,这样后面的每次提交都可以合并到这次commit,当然后面想改commit的描述也是随时可以改的
  2. 在项目中执行如下命令
git add .
# 会通过 core.editor 指定的编辑器进行编辑
git commit --amend  
# 不会进入编辑器,直接进行提交
git commit --amend --no-edit   
# 强制推送到上一次commit
git push --force  

3. 如何合并远程分支上的最近几个commit

注意⚠️:只适用于合并最近几个提交记录,不是最近几次的不适用

场景:每个迭代开发过程中,通常一个功能会有一个commit,但是最后发版时,需要对本次迭代的全部内容进行合并,那么就可以通过这个方法对远程的提交进行合并

方法如下:

git reset commit_id
git add .
git commit -am "feature:1.1.3"
git push --force

commit_id为合并的所有的提交的前一个commit的值,假如提交顺序为: feat: 功能3 feat: 功能2 feat: 功能1 feat:1.1.2 需要合并feat: 功能3,feat: 功能2,feat: 功能1为一个commit(feature:1.1.3),那么commit_id为feat:1.1.2所在的commit_id

4. git pull时遇到冲突

场景:本地开发到一半,需要获取同事在本地远程分支上的提交,执行git pull时遇到冲突提醒

解决方法:

# 1.先将本地修改存储起来
git stash   
# 2. 再次拉取代码
git pull
# 3.还原暂存的内容
git stash pop stash@{0}
# 4.解决冲突 然后正常提交 
git add . 
git commit -m 'xxx'
git push

5. 将开发分支上的commit通过cherry-pick的方式合并到master分支

场景:多人协同开发时,为了保证提交记录的时间线始终为一条线,那么可以采用cherry-pick的方式合并代码

基本用法(cherry-pick一个提交)

feature分支的代码应用到master分支,先切换到master分支

git checkout master
git cherry-pick <commitHash>

commitHash为feature分支需要应用到master分支的commit-id

如果是feature分支最新一次的提交也可以使用

# feature为具体的分支名称
git cherry-pick feature

cherry-pick多个提交

git cherry-pick <HashA> <HashB>

如果是多个连续的提交可以使用

git cherry-pick A..B 

注意⚠️:提交 A 必须早于提交 B;使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。

git cherry-pick A^..B 

代码冲突

解决冲突之后,执行

git add .
<!--git cherry-pick --continue-->
git -c core.editor=true cherry-pick --continue

之后会进入到vim编辑器页面,,要跳过编辑提交消息,您只需将编辑器设置为不执行任何操作并报告成功的命令.类Unix系统的理想选择就是true命令.因此使用下面的命令替换git cherry-pick --continue

git -c core.editor=true cherry-pick --continue

冲突解决完毕,推送到远程分支:

git push

tip1:push之前,cherry-pick之后,放弃合并,回到操作前的样子

git cherry-pick --abort

tip2:push之前,cherry-pick之后,放弃合并,不回到操作前的样子

git cherry-pick --quit

6. 下载github的项目到本地遇到权限问题

场景:执行下载命令时报错:

Please make sure you have the correct access rights and the repository exists.

 我在工作中使用Git的心得以及常见问题的解决

解决方案:

  1. 执行ssh-keygen -t rsa -C "你的git账号"

然后一直回车,直到出现下图:

 我在工作中使用Git的心得以及常见问题的解决

  1. 执行:cat ~/.ssh/id_rsa.pub

会出现一堆码:

ssh-rsa AAAAB3NzaC1tP1ui5bnQVG1lyVLGXOCjtlLsjzIUfcY0LkhSZbIwibEqpR80QLfk8c1t10wNlg6Ok33AayWM63KcHuiCBgEKYgfhEBdDXYl6NVhkWn0wp93UrD1/orKzYIyeZutXnmxtorPdCpVcmbQ4XZ8WBR0OOnGBUm3XmX9XROwMTqBZ/ssZuyeDPmENEKdP8+tOhhpdhLiHtOeHAxf9uUX1D5ZUc4Wi0Ai0QB46eRRgcpOLetA36jJwpSKmjv3XOYVP7+yaUJ27HGCKq1TEdXtgnBK0mY2g+nj6nHoJmZS6jRGJN1Pi1 [xxx@163.com](mailto:macuiling1995@163.com)

然后将这个码保存到个人的github上的SSH keys

然后再执行clone命令,即可成功

7. 使用rebase删除远程分支的某个提交记录

场景:

假如现有的提交记录是:

feat: 功能3

feat: 功能2

test: 测试代码

feat: 功能1

想要删除《test:测试代码》这条记录的话,使用如下命令:

# commit_id为要删除的记录的前一个记录的commit_id
git rebase -i commit_id  
# 然后会进入一个vim编辑器模式,点击键盘上的字母i进入编辑模式 把要删除的commit记录前面的pick改为d
# 然后点击esc退出编辑,输入:wq进行保存
# 查看当前的日志是否为想要的日志
git log
# 强推到远程
git push -f 
转载自:https://juejin.cn/post/7205111603464732730
评论
请登录