当前位置:   article > 正文

Git问题记录_git cherry-pick bad revision

git cherry-pick bad revision

Git问题记录

记录一下使用git过程中遇到的一些问题和心得。

1.git命令行删除本地/远程分支

删除本地分支

git branch -d local_branch_name-d--delete别名)

或者强制删除(带有大写D,它是 --delete --force 的别名),不考虑其合并状态。

先查看远程分支:
git branch -r

删除远程分支
git push origin -d remote-branch-name

或者

git branch -r -d origin/branch-name
git push origin :branch-name
  • 1
  • 2

第一句是删除了本地的远程跟踪分支,此时使用git branch -a查看,分支remotes/origin/branch-name应该已经不存在了。
为什么还需要第二句,因为上面只是把本地的远程跟踪分支删除了,远程的分支还没有删除,所以第二句就是真正的删除远程分支。

2.删除远程分支的时候提示:git fatal: 远程 origin 已经存在。

不小心将git远程地址配错了,再次配置提示以下错误:
fatal: 远程 origin 已经存在。

此时只需要将远程配置删除,重新添加即可;

git remote rm origin
git remote add origin https://github.com/***/WebCrawlers.git
  • 1
  • 2

再次提交文件即可正常使用。

3.提示:[rejected] master -> master (fetch first)

当我使用此命令时, $ git push origin master它会显示一条错误消息。

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'
  • 1
  • 2

1.如果要解决,请先获取pull(然后合并merge)。
2.如果要强制push,请使用该–force选项。

git pull origin master
或者
git fetch origin master
git merge origin master
  • 1
  • 2
  • 3
  • 4

当您尝试将非Git文件系统转换为Github存储库时,可能是一个例外。在那里,您必须强制执行第一次提交。

git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/userName/repoName.git
git push --force origin master
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.其他方法
如错误消息中所述,您必须“先获取”再合并。使用命令:

git fetch origin master
  • 1

然后按照以下步骤进行合并:

git pull origin master
git add .
git commit -m 'your commit message'
git push origin master
  • 1
  • 2
  • 3
  • 4

4.也有可能是远程仓库设置成保护模式了,需要更改下。

备注:如何上传到GitHub
参考:https://juejin.im/post/5c6b7241518825246b10351d

4.git checkout 命令

创建一个叫做“feature_x”的分支,并切换过去:

git checkout -b feature_x
  • 1

切换回主分支:

git checkout master
  • 1

再把新建的分支删掉:

git branch -d feature_x
  • 1

查看当前所有的本地分支:

git branch
  • 1

5.更新与合并

要更新你的本地仓库至最新改动,执行:

git pull
  • 1

如果提示:当前分支没有跟踪信息。请指定您要合并哪一个分支。
在这里插入图片描述

则需要执行执行:

git pull <远程> <分支>
  • 1

如果您想要为此分支创建跟踪信息,您可以执行(test_v0716为本地选定分支)
然后再执行从远程拉分支到本地即可:

git branch --set-upstream-to=origin/<分支> test_v0716
git pull
  • 1
  • 2

如果发现报下面的错误:您对下列文件的本地修改将被合并操作覆盖
在这里插入图片描述
可以执行下面的命令查看本地分支和远程分支之间的差异:

git status
  • 1

在这里插入图片描述

6.下载代码

如果pull的时候本地代码和远程分支差别太大,可以直接删除本地代码,再从远程分支pull下来。
下载远程指定分支的代码:

git clone -b dev_branch <仓库地址>
  • 1

7.回滚/撤销add

有时候我们使用git add .后且还没有执行git commit,想要撤销已经提交的add怎么办。
撤销暂存区全部文件修改:git reset HEAD
撤销暂存区某个文件修改:git reset HEAD <file>

8.回滚/撤销commit

有时候我们使用git add .git commit -m 'xxx'后且还没有执行git push,想要撤销已经提交的commit怎么办。
如果仅撤销最近一下commit,可以使用命令:git reset --soft HEAD^
这样就成功撤销了commit,如果想要连着add也撤销的话,--soft改为--hard(删除工作空间的改动代码)。
如果想回滚到某一个commit,需要找到commit_id,然后执行命令:git reset --soft commit_id

命令详解:
HEAD^ 表示上一个版本,即上一次的commit,也可以写成HEAD~1
如果进行两次的commit,想要都撤回,可以使用HEAD~2
如果不确定每次commit提交的改动,可以使用git log查看具体commit记录信息。
在这里插入图片描述

--soft:不删除工作空间的改动代码 ,撤销commit,不撤销git add file
--hard:删除工作空间的改动代码,撤销commit且撤销add

另外,如果commit写错了要如何修改?
git commit --amend
这时候会进入vim编辑器,修改完成你要的注释后保存即可。

9.回滚远程代码

1、本地代码回滚到上一版本(或者指定版本)

git reset --hard HEAD~1
  • 1

2、加入-f参数,强制提交,远程端将强制跟新到reset版本

git push origin branch_name -f
  • 1

10.git merge分支代码

背景:在工作中,我们经常需要merge同事分支的代码到自己分支上面测试,这个时候就需要用到git merge
假如同事的代码分支是A,我的代码分支是B
1.先切换到A分支,并拉一下A分支的代码:git checkout -b Agit pull origin A,此时本地就有了A分支的代码(如果有冲突,需要解决冲突)
2.再切换回到B分支,并把A分支的代码merge到B分支:git checkout Bgit merge A,此时A分支的代码就被merge到了B分支中
3.最后,再提交B分支代码到远程仓库,远程仓库B分支就有了A分支的代码。

11.git rebase(建议)

背景:git rebasegit merge 功能类似,只不过使用 rebase 可以使我们保持一个线性且更加整洁的提交历史。
参考:https://waynerv.com/posts/git-rebase-intro/#rebase-%E5%92%8C-merge-%E7%9A%84%E5%8C%BA%E5%88%AB
操作步骤:
方式一(建议):
1.在开发分支上执行:git pull --rebase origin master
2.解决冲突
3.推送本地分支代码到远程分支:git push origin feature_branch -f 或者 git push --force origin feature_branch
方式二:
1.更新master分支:git pull origin master
2.切换到feature分支:git checkout feature_branch
3.执行git rebase:git rebase master
如果有冲突,需要解决冲突。
4.推送本地分支代码到远程分支:git push origin feature_branch -f 或者 git push --force origin feature_branch
其他命令:git rebase --continuegit rebase --abort

12.git cherry-pick

背景:研发流程中,一般会有master和release分支,release分支一般会固定周期基于master checkout出来。
因为master分支是会不断有新代码合入,所以release分支一般会落后于master分支。
如果我们只需要把master分支的新合入的某一个commit合入到release分支,那么git cherry-pick就可以派上用场。
操作步骤(假设release分支只能通过merge request方式提交代码):
1.本地拉取release分支,基于release分支checkout出一个pick分支
2.找到master分支上需要pickcommitHash
3.执行git cherry-pick -m 1 <commitHash>
4.push代码到远程,新建merge request并合并代码到release分支即可
如果想要转移一系列的连续提交,可以使用下面的简便语法

git cherry-pick A..B 
  • 1

上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。
注意,上面的命令,区间是左闭右开的,即提交 A 将不会包含在 cherry-pick 中。如果要包含提交 A,可以使用下面的语法。

git cherry-pick A^..B 
  • 1

如果报错:fatal: bad revision 'A^..B',说明本地没有需要cherry-pick的代码,需要先fetch一下。

参考:https://www.cnblogs.com/zublogs/p/16091028.html

13.git revert

方式一:如果没有冲突,可以直接在网页上操作,操作简单方便。
在这里插入图片描述
方式二:
1.本地拉取master分支,基于master分支checkout出一个revert分支
2.找到master分支上需要revertcommitHash
3.执行git revert -m 1 <commitHash>
4.push代码到远程,新建merge request并合并代码到master分支即可
其他命令:git revert --continuegit revert --abort

官方文档:https://git-scm.com/docs/git-revert

13.拉取远程分支

背景:我们在本地开发分支dev_1,需要切换到开发分支dev_2上进行开发。
步骤:拉取远端分支, 先fetch后checkout
1.从远端仓库下载指定分支到本地:git fetch origin <remote_branch_name>
2.创建并切换到新的本地分支,并和远端同名分支建立track关系:git checkout <remote_branch_name> (不重新命名)
切换到未创建过的新分支:git checkout -b <new_branch_name> (以上面为基点切新分支)

参考链接

git - 简明指南:https://www.runoob.com/manual/git-guide/

Git教程 - 廖雪峰的官方网站:https://www.liaoxuefeng.com/wiki/896043488029600

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/516934
推荐阅读
相关标签
  

闽ICP备14008679号