看不到git远程分支
fetch会把远程服务器上所有的更新都拉取下来
git之 分支切换时相互影响的问题
接触git有一小段时间,期间有过不少疑问,幸得看了很多大神博客,收获颇丰。自己也写点东西,算是省得以后自己忘啦,如果同样有人从零开始,希望本篇博客可以略有帮助。
本篇博客主要讲git使用过程中,本地仓库分支(branch)切换过程中的影响。内容不多,但因为自己也是菜鸟明白那种心情,会写的详细(啰嗦)一点,望包涵。
git下分支的应用是很方便的一个功能,但是有一个问题,如果我在分支A有工作尚未完成,想要跳到分支B,如果不注意,可能搞乱你的工作。
首先说,如果你的分支分支A工作区和缓存区是干净的(即你在A分支commit之后再没做任何更改),你随便往别的分支跳都不会有影响的。但是如果你在A分支下有未完成的工作,即你用git status看显示有没有add或者commit的内容,你往B分支checkout的时候,会把你在A分支下的工作带过去,如图:
在命令$git checkout B之后显示的A A1 和A A2意思即为提醒使用者,有未提交的工作也一起跳转到分支B上啦(前面的大写A意味着A1,A2文件是新建且已经git add的文件;如果是大写M则意味着A1,A2文件为内容有更改的原有文件;D则意味着是删除了A1,A2文件)。这个时候你如果在B分支上进行其他工作而不编辑A1,A2文件,目前来说是没问题的。然而,一旦你在B分支上完成了某项工作,运行了commit命令,A1,A2文件之前的更改也会在A分支上进行提交,而git的规矩是,在那个分支上进行的提交,就算哪个分支上的工作。
也就是说,一旦你把A分支上尚未完成的工作带到了B分支上并在B分支上顺利提交,那么你本来希望是在A分支上进行的工作,则会被提交到本地库中B分支上,该部分工作在A分支下用git log命令查看不到但是在B分支下则可以查看到。这在实际的工作中会导致你的两个分支乱掉或者出现提交冲突。不是不能补救,但是会很麻烦,所以要尽量避免。
那么怎么避免呢?事实上,在比较旧的版本的git下,你在分支A下有未完成的工作的情形下,是无法跳转到分支B下的,这就很好的避免了后续的尴尬情况,不过目前版本的git是允许你带着未完成工作进行跳转的,所以你可以通过以下手段来避免这种情况下搞乱你的工作:
1.跳转分支之前git status一下查看是不是有没有add和commit的工作,如果有,可以的话,就都提交掉。(事实上尚未add的工作带到了新分支下如果不继续对该文件进行处理,带过去也是没有影响的,大不了跳回来再带回来嘛,反正木有add过的内容在新分支下commit也不会把这部分工作提交。)
2.如果确实有尚未add和commit的工作,但是并未完成不方便进行提交,可以利用git stash进行现场保留,然后跳转。(git stash的用法也是一块比较重要的内容,这里暂不详细介绍了,可以直接百度其用法~)
3.如果1.2你都没有做,很不小心地带着未commit的工作跳转到了另一分支下,跳转之后的提示可以让你意识到你把先前分支的工作带过来了,不做任何修改直接再跳回去就好(就又带回去了),然后进行1或2步中所说。
1、撤掉
a、如果还没 git add file ,使用该指令进行撤销: git checkout -- fileName
b、如果已经git add file , 但是没有 git commit -m "" 分两步操作:
b-1、git reset HEAD readme.txt
b-2、git status
b-3、git checkout -- file
c、如果已经git add file 并且已经 git commit ,那么回退版本办法是:
c-1、通过 git log 或者 git log --pretty=oneline 、git reflog
c-2、找到对应的commit id进行回退:git reset --hard 1094a
2、删除
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
a、git rm test.txt
b、git commit -m "remove test.txt"
merge与rebase的区别
https://blog.csdn.net/fz13768884254/article/details/82662451