致谢
前言
- 自己是git新手,在本地没有分支的时候不知道怎么拉取(从别的电脑push的)远程分支,完全没办法,只好删除整个文件夹重新clone,后来到网上好好学了学,总算知道了。
- 这里重点介绍一下本地没有该分支,需要到远程拉取该分支的方法
本地没有的时候拉取远程分支
错误做法
git branch link-rosforlvgit checkout link-rosforlvgit pull origin link-rosforlv
-
因为,这样建立的branch是以master为基础建立的,再pull下来的话,会和master的内容进行合并,有可能会发生冲突
正确用法
- 用
git branch -a
查看包括远程分支在内的所有分支: - 使用
checkout
命令来把远程分支取到本地,并自动建立tracking
git checkout -b link-rosforlv origin/link-rosforlv
- 或者使用-t参数,它默认会在本地建立一个和远程分支名字一样的分支
git checkout -t origin/link-rosforlv
- 也可以使用fetch来做: git fetch origin link-rosforlv:link-rosforlv
不过通过fetch命令来建立的本地分支不是一个track branch,而且成功后不会自动切换到该分支上
结语
- 学完之后才发现有这么多种方法可以做到这些,瞬觉自己才疏学浅,惭愧惭愧。
误在master上做开发
- git stash 可以暂时将当前修改压入git stack栈中,在checkout 到其他分支后再从栈中压出来
# on mastergit stashgit branch devgit checkout devgit stash apply# 注意:2,3两步可以合为git checkout -b dev
git submodule
合并一个分支的特定commits
合并一个分支的一个重要commit
- 比如,feature 分支上的commit 62ecb3 非常重要,它含有一个bug的修改,或其他人想访问的内容。无论什么原因,你现在只需要将62ecb3 合并到master,而不合并feature上的其他commits,所以我们用git cherry-pick命令来做:
git checkout mastergit cherry-pick 62ecb3
commit提交错误
提交之后发现还有文件忘了提交
git commit -m 'initial commit'git add forgotten_filegit commit --amend # 这个命令会将暂存区中的文件提交
其他错误
detached HEAD问题
- 使用VSCode时候,提交时选择了origin/global_planner而不是global_plannner,结果checkout 过去发现自己不在一个branch里面,而是在某一个commit里面
- 问题是,我其实是想生成一个新的branch,并且保存这些更改
git checkout global_planner # 执行完毕后仍然在master分支git checkout otigin/global_planner # 执行完后来到了一个commit,而不是一个branch,此时就是detached HEAD状态git checkout -b temp # 将此commit生成一个branch# 之后就可以merge了git checkout master git merge temp
git large file support
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com
解决办法
#下载git large file 插件# 到库里面git lfs install