Git的各种用法太多了,以下针对部分场景下Git的使用作一个总结
目录
不提交当前分支,切换到其它分支进行操作
假设在当前分支上已经进行了bug修改但还未提交,转而要切换到master分支上去修复bug,执行 $ git checkout master 命令的时候将会提示错误.
可以采取的解决方法有两种:一种是先提交后再切换,一种是使用 stash .
在需要切换的分支上执行 $ git stash,可将当前分支存储起来,然后就可以切换到master分支上去;修复完master分支上的bug并提交后,想要切回原来的分支,需要恢复未提交的改动:
- 使用 $ git stash list 命令查看存储列表
- 使用 $ git stash show -p stash@{id} 可以查看具体更改的内容.
- 使用 $ git stash apply 命令恢复. 如在一个分支上有多个stash,可在命令尾部加 id 来指定某个stash, 如 $ git stash apply stash@{id} . 此命令执行后,stash的内容不会被删除,需要使用 $git stash drop 来删除.
- 使用 $ git stash pop 命令恢复. 使用此命令,恢复的同时会把stash存储列表的内容也删除了. 如要指定具体的序号,可以使用 $ git stash pop stash@{id}
- 使用 $ git stash save ‘message…’ 命令可以添加注释信息
分支相关操作
- 新建分支,并切换到指定的远程分支:
$ git checkout -b 本地分支名 origin/远程分支名 - 查看本地分支及追踪的分支:
$ git branch -vv
修改合并多个commit
假如想要修改以前的三次提交信息,将这三次提交的最早一个的父提交(commit id,这个提交是不参与合并的,可以视为一个坐标)作为参数传递给 $ git rebase -i 命令,或者是将 HEAD~3 作为参数传递.
然后会弹出一个交互式变基的运行脚本,它会将你指定的那个最旧的一个提交列在最上面. 我们将准备合并入最上面提交的那两个提交前的 ‘pick’ 改为 ‘s’,保存退出后,git 会压缩提交历史,然后弹出注释修改界面,编辑完保存退出,即可完成. 如果压缩提交历史时有冲突,需要修改,修改后执行 $ git add . 以及 $ git rebase continue,如果想放弃这次 commit 的压缩的话,使用 $ git rebase --abort
在推送到远程分支时,需要强制推送,使用 $ git push -f
在commit之后想要撤销
- 不删除工作空间改动,撤销commit,不撤销 $ git add :
$ git reset --soft HEAD^ - 不删除工作空间改动,撤销commit,撤销 $ git add :
$ git reset --mixed HEAD^ - 删除工作空间改动,撤销commit,撤销 $ git add :
$ git reset --hard HEAD^
相关配置命令
- 解决提示"文件名过长"错误:
$ git config --system core.longpaths true
仅设置当前项目:
$ git config core.longpaths true
查看设置状态:
$ git config core.longpaths
一般性开发流程
- 项目初始化获取代码
$ git clone <git repository url> - 新建分支并进行开发工作
$ git checkout -b newbranch - 开发完成,在本地提交修改的代码
$ git commit -m “…” - 切换到master分支,拉取服务器的最新代码
$ git checkout master & git pull - 切回到newbranch分支,rebase到最新master分支
$ git rebase master - 最后推送本地的代码到服务器
查看未推送到远程代码库的提交
- 查看未传送到未传送到远程代码库的提交次数:
$ git status
- 查看未传送到远程代码库的提交描述/说明:
$ git cherry -v
- 查看未传送到远程代码库的提交详情
$ git log master ^origin/master
处理本地代码处于detached HEAD的情况
可按顺序执行:
- $ git commit 进行提交. (提交完本地分支指向刚commit完的状态码,例如h72363)
- $ git branch short h72363,在本地创建short分支,并将commit的内容放到新分支里存储.
- $ git checkout short 切换到刚才新建的分支.
- $ git checkout master 切换到原来开发的分支.
- $ git merge short 将之前存储到short分支上的内容合并到当前的分支上.
- $ git branch -d short 删除short临时分支
查看某行代码的修改历史
- 查看某行代码的提交commit_ID(50-100行)
$ git blame -L 50,100 file_name - 根据 commit_ID 可以查看对应的提交记录
$ git show commit_ID
用 HTTPS URL 与远程仓库交互不输入用户名和密码
- 让git存储用户名和密码
$ git config --global credential.helper store - 保存会话的用户名和密码(缓存)
$ git config --global credential.helper cache
打标签相关操作
- 简单打tag
$ git tag <name> - 创建带有说明的标签
$ git tag -a <name> -m “…” <commit id> - 查看所有标签
$ git tag - 查看标签信息
$ git show <tagname> - 把本地指定tag推送到远程
$ git push origin <tagname> - push所有tag
$ git push origin --tags