赞
踩
记录一下使用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
第一句是删除了本地的远程跟踪分支,此时使用git branch -a查看,分支remotes/origin/branch-name应该已经不存在了。
为什么还需要第二句,因为上面只是把本地的远程跟踪分支删除了,远程的分支还没有删除,所以第二句就是真正的删除远程分支。
不小心将git远程地址配错了,再次配置提示以下错误:
fatal: 远程 origin 已经存在。
此时只需要将远程配置删除,重新添加即可;
git remote rm origin
git remote add origin https://github.com/***/WebCrawlers.git
再次提交文件即可正常使用。
当我使用此命令时, $ git push origin master它会显示一条错误消息。
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'
1.如果要解决,请先获取pull(然后合并merge)。
2.如果要强制push,请使用该–force选项。
git pull origin master
或者
git fetch origin master
git merge origin master
当您尝试将非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
3.其他方法
如错误消息中所述,您必须“先获取”再合并。使用命令:
git fetch origin master
然后按照以下步骤进行合并:
git pull origin master
git add .
git commit -m 'your commit message'
git push origin master
4.也有可能是远程仓库设置成保护模式了,需要更改下。
备注:如何上传到GitHub
参考:https://juejin.im/post/5c6b7241518825246b10351d
创建一个叫做“feature_x”的分支,并切换过去:
git checkout -b feature_x
切换回主分支:
git checkout master
再把新建的分支删掉:
git branch -d feature_x
查看当前所有的本地分支:
git branch
要更新你的本地仓库至最新改动,执行:
git pull
如果提示:当前分支没有跟踪信息。请指定您要合并哪一个分支。
则需要执行执行:
git pull <远程> <分支>
如果您想要为此分支创建跟踪信息,您可以执行(test_v0716为本地选定分支)
然后再执行从远程拉分支到本地即可:
git branch --set-upstream-to=origin/<分支> test_v0716
git pull
如果发现报下面的错误:您对下列文件的本地修改将被合并操作覆盖
可以执行下面的命令查看本地分支和远程分支之间的差异:
git status
如果pull的时候本地代码和远程分支差别太大,可以直接删除本地代码,再从远程分支pull下来。
下载远程指定分支的代码:
git clone -b dev_branch <仓库地址>
有时候我们使用git add .
后且还没有执行git commit
,想要撤销已经提交的add怎么办。
撤销暂存区全部文件修改:git reset HEAD
撤销暂存区某个文件修改:git reset HEAD <file>
有时候我们使用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编辑器,修改完成你要的注释后保存即可。
1、本地代码回滚到上一版本(或者指定版本)
git reset --hard HEAD~1
2、加入-f参数,强制提交,远程端将强制跟新到reset版本
git push origin branch_name -f
背景:在工作中,我们经常需要merge同事分支的代码到自己分支上面测试,这个时候就需要用到git merge
假如同事的代码分支是A,我的代码分支是B
1.先切换到A分支,并拉一下A分支的代码:git checkout -b A
,git pull origin A
,此时本地就有了A分支的代码(如果有冲突,需要解决冲突)
2.再切换回到B分支,并把A分支的代码merge到B分支:git checkout B
,git merge A
,此时A分支的代码就被merge到了B分支中
3.最后,再提交B分支代码到远程仓库,远程仓库B分支就有了A分支的代码。
背景:git rebase
和 git 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 --continue
、git rebase --abort
背景:研发流程中,一般会有master和release分支,release分支一般会固定周期基于master checkout出来。
因为master分支是会不断有新代码合入,所以release分支一般会落后于master分支。
如果我们只需要把master分支的新合入的某一个commit合入到release分支,那么git cherry-pick
就可以派上用场。
操作步骤(假设release分支只能通过merge request方式提交代码):
1.本地拉取release分支,基于release分支checkout出一个pick分支
2.找到master分支上需要pick
的commitHash
3.执行git cherry-pick -m 1 <commitHash>
4.push代码到远程,新建merge request并合并代码到release分支即可
如果想要转移一系列的连续提交,可以使用下面的简便语法
git cherry-pick A..B
上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。
注意,上面的命令,区间是左闭右开的,即提交 A 将不会包含在 cherry-pick 中。如果要包含提交 A,可以使用下面的语法。
git cherry-pick A^..B
如果报错:fatal: bad revision 'A^..B'
,说明本地没有需要cherry-pick的代码,需要先fetch一下。
参考:https://www.cnblogs.com/zublogs/p/16091028.html
方式一:如果没有冲突,可以直接在网页上操作,操作简单方便。
方式二:
1.本地拉取master分支,基于master分支checkout出一个revert分支
2.找到master分支上需要revert
的commitHash
3.执行git revert -m 1 <commitHash>
4.push代码到远程,新建merge request并合并代码到master分支即可
其他命令:git revert --continue
、git revert --abort
官方文档:https://git-scm.com/docs/git-revert
背景:我们在本地开发分支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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。