git作为分布式协作版本控制工具, 在使用的过程中常常会遇到各种问题, 下面列举比较常见的一些问题及其解决办法.
git branch -r //查看所有远程分支
git branch -a //查看所有远程分支和本地分支
git branch //查看所有本地分支
2.拉取远程分支并创建本地分支
需求: 其他小伙伴已经创建了a分支,并推到远程分支了,你需要拉取a分支并在本地创建a分支
方法1:git checkout -b a origin/a
// 使用该方式会在本地新建分支a,并自动切换到该本地分支a。
并且采用此种方法建立的本地分支会和远程分支建立映射关系。
方法2:git fetch origin a:a
//使用该方式会在本地新建分支a,但是不会自动切换到该本地分支a,需要手动checkout。采用此种方法建立的本地分支不会和远程分支建立映射关系。
3.本地分支和远程分支建立映射关系的作用
git branch -vv // 查看本地分支和远程分支的映射关系(跟踪关系track),前面带*号的表示当前分支
git branch -u origin/分支名 // 手动建立本地分支和远程分支都有映射关系
git branch --set-upstream-to origin/分支名 // 手动建立当前分支与远程分支的映射关系
git branch --unset-upstream // 撤销本地分支与远程分支的映射关系
问题思考:本地分支只能跟踪远程的同名分支吗?
答: 否,操作时指定和本地分支名不同的远程分支名即可。
git log //查看提交的历史
git log --pretty=oneline //如果嫌上面的输出信息过多可以使用这条(只输出版本号)
git reflog //用git log是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid ,并且可以看到所有分支的commit
git reset --hard HEAD^ //回到上个版本,
git reset --hard HEAD^^是上上个版本
git reset --hard HEAD~1 回到指定上几个版本, 数字从0开始,1表示回退到上上个版本
git reset --hard 版本号 要回到指定版本, 直接在后面加版本号即可.
git revert HEAD //撤销最近一次提交
git revert HEAD~1 //撤销上上次的提交,注意:数字从0开始
git revert 0ffaacc //撤销0ffaacc这次提交
4.前进到某个版本
git reset --hard aff8f0892
更多请移步这里: https://blog.csdn.net/qq_37210523/article/details/84856794
1.发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时就可以考虑
git stash
。
2.使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码,如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个 紧急Bug,那么使用
git stash
就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply
将以前一半的工作应用回来。
3.经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是
git stash
命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。
(2)使用git stash
git stash //会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
git stash pop // 重新应用缓存的stash
git stash list //查看现有stash
git stash drop //移除stash
git stash show //查看指定stash的diff
git stash branch //从stash创建分支
git revert -m 1 18d290169ac80120c4401f17719122c3500ecfaf
更多请查看这里: https://blog.csdn.net/qq_37210523/article/details/84857075
git commit --amend -m "your new message"
其他情况请参考这篇文章: https://blog.csdn.net/sodaslay/article/details/72948722
无法推送 refs 到远端。您可以试着运行“拉取”功能,整合您的更改。
问题描述:在远程分支已经有了一个a分支, 这时我本地也新建了一个a分支, 当我push时提醒了远程没有a分支, 原因是本地a分支没有和远程a分支建立关联, 于是我pull,就遇到上面这个提示。
解决:
在a分支执行 git pull origin a
让本地分支与远程分支相关联, 然后push上去即可。
扩展:
如果是想在本地新建分支并且远程并没有建立该分支,可以直接执行以下操作:
git checkout -b dev 新建并切换到本地dev分支
git pull origin dev 本地分支与远程分支相关联
2.Git推送遇到 Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
git branch --set-upstream-to=origin/ master
如果在执行以上命令时出现:
请将–set-upstream 替换为 --track
扩展:
(1)查看分支:
git branch //查看本地分支
git branch -a //查看本地和远程分支
(2)删除分支
git branch -D test //删除本地分支
git push origin:test //删除远程分支, 需要有权限
注:删除时需要先切换到其他分支再操作
3.Git操作失败并提示Another git process seems to be running in this repository或者 Unable to create xxx/.git/index.lock’: File exists.
原因: 在于Git在使用过程中遭遇了奔溃,部分被上锁资源没有被释放导致的。
解决: 进入项目文件夹下的 .git文件中(显示隐藏文件夹或rm .git/index.lock)删除index.lock文件即可。
参考链接:
Git高级教程(二)] 远程仓库版本回退方法
Git恢复之前版本的两种方法reset、revert(图文详解)
Git revert使用和例子
廖雪峰的官方网站-git版本回退
解决git提交敏感信息(回退git版本库到某一个commit)
git回退到某个版本并提交到远程仓库
git revert 实战
git reset revert 回退回滚取消提交返回上一版本
git stash用法小结
如何修改Git commit的信息
How to modify existing, unpushed commits?
git 本地分支与远程分支关联的一种方法
Git远程推送常见错误及解决方案: