Git stash
使用场景:使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。
- git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
- 可以用 git stash save 来给 压人栈的记录起个名字
$ git stash save "stash_name"
- git stash pop命令恢复之前缓存的工作目录,这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下
- git stash apply命令,将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝
- git stash list 查看压人栈的临时提交
- 移除某些临时提交, stash git stash drop命令,后面可以跟着stash名字
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
$ git stash drop stash@{0}
Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)
在本地以某个远端分支为蓝本创建新分支,并切换上去
查看所有分支的名称
>git branch -av
> git checkout -b 本地分支名 远端分支名
eg
> git checkout -b feature_A origin/feature_A
这样最后直接推送,由于这里已经把分支关联起来了
git push就 ok了
当不同人的人修改了不同的文件/ 当不同人的人修改了相同文件不同部分
一种做法:在本地分支上,执行合并流程
先把远端的数据拉取下来,git fetch不会影响当前分支的未提交数据
>git fetch
然后和最新远端数据进行合并
>git merge 远端分支名
另一种做法:
如果在进行git push之前发现远程又有了更新,比较好的做法应该是,将本地的提交回退掉,避免掉无用的远程merge本地分支的提交记录,可以使用如下命令:
1.git reset HEAD~
2.git pull
然后重新进行新的提交,这样就可以避免掉远程与本地分支的merge提交记录,让git的提交历史更加干净
修改了同一行数据
后提交的人执行了 git pull,git会自动将代码进行合并(merge),如果修改的是同一行代码,那么会自动合并失败
需要手动合并,然后 git add /git commit ,最后推送到远程分支上
个人感觉 git pull = git fetch +git merge
不能使用的git 命令
- git push -f 分支名 会造成远程分支的数据强制与本地分支相同
- 不要在团队协作的主分支上,进行rebase操作