git使用过程中出现的问题
HEAD:当前commit的引用
当前 commit 在哪里,HEAD 就在哪里,这是一个永远自动指向当前 commit 的引用,所以你永远可以用 HEAD 来操作当前 commit,
1.删除分支:
git branch -d 名称中出现的问题
-
HEAD 指向的 branch 不能删除。如果要删除 HEAD 指向的 branch,需要先用 checkout 把 HEAD 指向其他地方。
-
由于 Git 中的 branch 只是一个引用,所以删除 branch 的操作也只会删掉这个引用,并不会删除任何的 commit。(不过如果一个 commit 不在任何一个 branch 的「路径」上,或者换句话说,如果没有任何一个 branch 可以回溯到这条 commit【野生 commit】,那么在一定时间后,它会被 Git 的回收机制删除掉)
-
出于安全考虑,没有被合并到 master 过的 branch 在删除时会失败(怕误删未完成branch)把-d换成-D可以强制删除
2.合并分支:
git merge branch1时出现的问题
-
merge冲突:你的两个分支改了相同的内容,Git 不知道应该以哪个为准。如果在 merge 的时候发生了这种情况,Git 就会把问题交给你来决定。具体地,它会告诉你 merge 失败,以及失败的原因;这时候你只需要手动解决掉冲突并重新add、commit(改动不同文件或同一文件的不同行都不会产生冲突);或者使用
git merge --abort放弃解决冲突,取消merge -
HEAD 领先于目标 commit:merge是一个空操作:此时merge不会有任何反应。
-
HEAD 落后于 目标 commit且不存在分支 ( fast-forward ) : git会直接把HEAD与其指向的branch ( 如果有的话 ) 一起移动到目标commit。
3.刚提交的代码发现写错了如何解决?
(1)修改好问题
(2)将修改add到暂存区
(3)使用git commit --amend提交修改 --- > 减少了一次无谓的commit
4.错误代码已经push到远程仓库?
出错内容在自己的分支
假如是某个你自己独立开发的 branch 出错了,不会影响到其他人,那没关系用前面几节讲的方法把写错的 commit 修改或者删除掉,然后再 push 上去就好了。但是此时会push报错,因为远程仓库包含本地没有的 commits(在本地已经被替换或被删除了),此时直接使用git push origin 分支名 -f强制push。
问题内容已合并到master
(1)增加新提交覆盖之前内容
(2)使用git revert 指定commit
你希望撤销哪个 commit,就把它填在后面。如:git revert HEAD^
上面这行代码就会增加一条新的 commit,它的内容和倒数第二个 commit 是相反的,从而和倒数第二个 commit 相互抵消,达到撤销的效果。在 revert 完成之后,把新的 commit 再 push 上去,这个 commit 的内容就被撤销了。它和撤销方式相比,最主要的区别是,这次改动只是被「反转」了,并没有在历史中消失掉,你的历史中会存在两条 commit :一个原始 commit ,一个对它的反转 commit。
5.reset使用中的问题
git reset --hard 指定commit你的工作目录里的内容会被完全重置为和指定commit位置相同的内容。换句话说,就是你的未提交的修改会被全部擦掉。
git reset --soft 指定commit会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。
git reset --mixed(或者不加参数) 指定commit保留工作目录,并且清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作区。简而言之,就是「把所有差异都混合(mixed)放在工作区中」。