Equation 2020-05-07
git作为一个vcs(version control system),是越用越香,那么还有哪些比较香的地方呢!?
一定遇到这种情况,github看到一个心仪的开源仓库,但是分支太多,我们只想要我们需要的分支。
git clone -b <指定分支名> <远程仓库地址>
项目里包含的一些库或者一些模块是存在了别的仓库,可以用递归来克隆回来。一次性就能解决所有的依赖模块
git clone --recursive https://github.com/dotnet/aspnetcore.git
分支众多,要切换到指定分支
#tag标签管理 git tag git checkout tag值 #branch分支管理 git branch git switch 分支名
git tag v1.0 #默认标签是打在最新提交的commit上
上面标签,是为最新的一次提交创建的。但是我们想吃后悔药——为之前的分支创建标签,该怎么做呢!?
$ git log --pretty=oneline --abbrev-commit $ git tag 标签值 commitId #查看标签信息 $ git show 标签值
$ git tag -d v0.1 #删除远程标签 $ git tag -d v0.9 $ git push origin :refs/tags/v0.9
#推送指定标签至远程 $ git push origin v0.1 #推送全部标签至远程 $ git push origin --tags
从gitee 创建仓库,可选择创建不同项目下.gitignore文件模板。但是我们修改.gitignore文件,并不生效。.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的,把要忽略的文件改为未track状态
git rm -r --cached . #清除缓存 取消跟踪所有文件,但不删除本地文件 git add . #重新trace file git commit -m "update .gitignore" #提交和注释 git push origin master #可选,如果需要同步到remote上的话
一般情况,常规操作是先在github
或者gitee
创建远程仓库,然后
git clone git add -A git commit -m "" git push -u origin master
但是还有一种情况,先通过git init
创建的本地仓库,突然发现今天写的代码太优美了,要整个远程仓库存起来。
#初始化-建立本地仓库 git init #把本地仓库与远程仓库关联 git remote add origin :RandyField/xxxxx.git #push git push -u origin master #但是可能会出现如下错误 ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to ‘:RandyField/xxxxx.git‘ hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: ‘git pull ...‘) before pushing again. hint: See the ‘Note about fast-forwards‘ in ‘git push --help‘ for details. #原因是创建远程仓库,和本地仓库没有关联,也具有差异 #把远程仓库和本地同步,消除差异,把两段不相干的分支进行强行合并 git pull origin master --allow-unrelated-histories git add -A git commit -m "[dev]init" git push -u origin master
将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样(将一个分支的修改操作在另一个分支最新的提交基础上在依次应用)。
#小明童鞋,克隆 git clone xxx.git #小明童鞋,创建了dev分支 git switch -c dev git add . git commit -m "c" git add xxx.go git commit -m "update xxx.go" git add App.vue git commit -m "update App.vue" #大明童鞋,克隆 git clone xxx.git git add main.js git push -u origin master #小明童鞋 git switch master git pull git switch dev git rebase master #有冲突,需要手动合并文件解决,解决冲突后使用git add表示冲突已经解决 git add . #表示继续下一个冲突 git rebase --continue #切换至master git switch master #快进合并 git merge dev # 其他命令 git rebase --skip #表示跳过当前冲突, git rebase --abort #表示退出rebase模式,回到运行git rebase master命令之前的状态
rebase
干了什么?
master
和dev
最近一个共同的父commit对象git rebase master
会提示有冲突(因为我们在master和dev可能修改了相同的文件),对冲突文件进行手工合共,然后git add .
标记冲突解决,git rebase --continue
告诉Git冲突已经解决。dev
分支上变基(git rebase master)。这时我们回到msater分支执行 git merge dev
就可以进行"快进(fast-forward)"模式合并。https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA