常见的Git场景总结
独自使用Git的场景
怎样删除不需要的分支
- git branch -av:显示所有的分支
- git branch -d 分支名:删除某一个分支
- 如果-d搞不定的那么,git branch -D 分支名,就能彻底的删除了。
修改老旧的commit的message
- git commit -amend:对最近提交的一次commit的message进行变更
把连续多个commit整理成一个
$ git rebase -i 选择要合并提交的父亲
怎么比较暂存区和HEAD所含文件的差异
- git diff --cached:暂存区和HEAD的差异
怎么比较工作区和暂存区所含文件的差异
- git diff:默认比较的是工作区和暂存区的区别
如何让暂存区恢复到和HEAD一样
- git reset HEAD
如何让工作恢复到和暂存区的一样
- git checkout -- <file>
怎样取消暂存区部分文件的更改
- git reset HEAD -- <file>
消除最近的几次提交
- git reset --hard <commit的哈希值>
看看不同提交的指定文件的差异
- git diff 分支1 分支2 (-- 文件名)
正确删除文件的方法
- git rm filename #git会将这删除文件的情况放到暂存区而不需要先在工作路径下删除文件
开发中临时加塞了紧急任务怎么处理
- git stash #保存当前工作进度,会把暂存区和工作区的改动保存起来
- git stash #显示保存进度的列表
- git stash pop #恢复刚刚(也就是最新)的进度,但是stash的列表中是不保留的
- git stash apply #stash的列表中还是保留的
- git stash drop [stash_id] #删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。
- git stash clear #删除所有存储的进度
如何指定不需要Git管理的文件
编辑.gitignore文件即可,在.gitignore文件中文件名+/代表git不会管这个文件夹下的文件的,但是出现了同名文件还是会管;如果是直接加文件名,那么就会不管是文件夹下的文件还是同名文件git都会去管。
Git多人单分支集成协作时的常见场景
不同人修改了不同文件如何处理
A同学首先从远端克隆仓库
$git clone ssh地址 (自己本地文件名)
查看所有的分支
$git branch -av
然后基于远端的分支创建出一条本地的分支,将分支切换到这条分支上去
$git checkout -b 本地分支名 远端分支名
修改完成后
$git push orgin (本地分支名:远端分支名)
B同学远端拉取后也在这个分支进行了修改,但在修改时A同学又向远端提交了新的内容。
$git fetch 远端仓库名
$git merge 远端仓库分支 #如果是A修改的不同的文件,merge应该是非常顺利的
$git push
不同的人修改了同文件的不同区域怎么处理
A同学修改完成后push到了远端,但是B同学不知道以为是fast-forward push到远端发现远端拒绝了。
- a方式:pull下来
- b方式:分两步走先fetch下来,然后做一次merge
不同的人修改了同文件的不同区域怎么处理
A同学修改完后push到了远端,B同学也push到远端被拒绝了,因为修改了同文件的同一地方Git无法合并,所以需要人为处理。修改文件来fix conflicts然后git commit。
同时变更了文件名和文件内容如何处理
对同一个文件A同学变更了文件名,并先提交了上去。B同学修改了文件的内容,也提交了上去,此时会报错。当git pull下来时,git会足够智能的进行合并的操作,不受影响。git pull后文件名发现变化,里面修改的内容依然保留。
把同一文件修改成了不同的文件名如何处理
A同学修改了文件名并进行了提交,B同学不知道也修改了文件名,所以提交报错了。git pull后文件夹内出现了两个不同名的文件,我们可以diff 文件1 文件2来查看一下差别。发现文件的内容是一样的。也就是文件名不同而已。我们再用git status 来看一下,git会告诉我们我们删除了文件(原),added by us 文件1(我们修改的名字),added by them: 文件2(他们修改的名字)。这就要我们自己协商去解决,然后将一个原来的文件删除,将我们想要的文件来加入到暂存区中,将我们另外一个不需要的文件删除掉。然后再一次提交即可。