1.在修改代码的过程中有新增、有修改、有删除要一次性提交,那么要执行git add * 么?
解决方法:
序号
命令
中文释义
1 git add -A 保存所有修改(包括新增、修改、删除)
2 git add . 保存新添加及修改(包括添加、修改不包括删除)
3 git add -u 保存修改和删除(包括修改、删除不包括新增)
像上述问题那么就要使用git add -A了。
2.在本地修改文件时,发现修改的文件改错了,想要还原到和版本库上边一致的,要怎么还原?
解决方法:
方法①直接删除该文件,然后本地执行:git checkout file ,也可以使用git checkout .(这里有个“.”不要忘记),但是使用后者会把修改过的文件也还原掉,慎用。
方法②如果只修改了这一个文件的话,可以执行:git reset –hard HEAD(HEAD也可以用具体的哈希值来替换,通过git log来查看,commit后边的一串字符就是)。
3.本地修改文件后执行了git add -A,但是在commit执行前忽然发现有个文件误删了,想要恢复,然后按照问题2中的执行命令:git checkout . 但是发现误删的文件并没有回来,这是什么原因啊?
解决方法:在本地执行过git add -A 后,当前所有的变动(包括新增、修改、删除)会存放至暂存区,此时你误删的文件执行checkout是回不来的,这是需要执行git reset HEAD就可以了。为了检查是不是取消了之前的git add -A的操作,你可以执行git status查看下。
4.之前创建了好多个分支,merge完之后发现这些没用的分支都可以删除了,怎样才能删除这些分支呢?
解决方法:首先可以使用git branch -a查看下当前有那些分支,然后选取需要删除的分支,执行git push origin –delete 分支名 即可。如果要同时删除多个分支,可以直接在”分知名”后边直接跟上其他分知名。
5.提交gerrit报错:missing Change-Id in commit message footer,这是什么原因啊?
解决方法:参见链接提交gerrit报错:missing Change-Id in commit message footer
6.如何生成patch并合入对应版本呢?
解决方法:首先切换至要生成patch的分支。然后执行git format-patch -M master (如果是要和master对比的话),这时会在当前目录下边生成X.patch文件,git checkout master 切换回master分支,执行git am X.patch即可将patch合入。
7.git里边有没有和SVN对应的类似merge的命令?我想把分支的代码master分支的代码同步到当前分支上边。
解决方法:有,这样的命令是:git rebase 。用法为,确认当前分支为被同步分支,然后执行命令git rebase master ,这个命令就是把master分支的变动同步到当前分支上边(一般是保证master的稳定性,不会从其他分支同步到master上边)。当然,同步merge必然会出现的就是冲突,有冲突时会生成.git/rebase-apply/patch这样的文件,查看patch找到哪些文件有冲突,修改完之后执行 “git rebase –continue”;如果您想跳过此补丁,则执行 “git rebase –skip”;要恢复原分支并停止变基,执行 “git rebase –abort”。
8.使用git后,分支切换了好多,但是一个人可能同时参与几条分支的开发,有时候需要快速切换于多个分支之间,但是常常会出现这样的情况,必须提交后才能切换到其他分支。例如,当前处在master分支,修改一些文件后突然需要切换到另一分支,切换时出现如下报错:
解决方法:这样的情况是你在一个分支上边修改完了,但未做提交保存,切换分支不允许导致的。一种方法是可以先提交再切换分支;另外一种方法就是可以临时存下来,使用命令git stash 这时会为你保存下来此刻的修改情况。等修改完另一分支,想回来接着修改,执行git stash pop即可回到之前的修改。这里边pop是指从stash保存的栈中末端提取出来,git stash apply stash@{0} 的作用是可以指定栈中的一个版本,通过git stash list可以看到所有的版本信息。
9.git checkout branch 是切换分支,git checkout files是还原文件,当branch和files万一同名时,两者的优先级是怎样的?
解决方法:当branch和files同名时,系统会出现报错:
error: Your local changes to the following files would be overwritten by checkout:
test
Please, commit your changes or stash them before you can switch branches.
Aborting
并未呈现所谓的“优先级”,git需要你在当前分支将与分支同名的文件提交或者保存到stash才可以切换。