# learn_git **Repository Path**: yanghz2019/learn_git ## Basic Information - **Project Name**: learn_git - **Description**: 学习廖雪峰的git教程 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-11 - **Last Updated**: 2021-04-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 好好学习,天天向上 添加修改 理解 git 暂存区 第一次修改 第二次修改 理解撤销修改 三个场景: 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 小结学习了那些命令 1.git init 2.git add / git commit -m /git log /git status /git reflog 3.版本跳转 git reset --hard head^ 4.撤销修改 git checkout -- filename 学习了那些概念 1.集中式和分布式的区别 --是否本地有完整版本库 2.暂存区 -- git add 命令添加到暂存区,git commit 提交暂存区的内容 --远程仓库连接 1.打开用户主目录 cd~ 2.创建ssh ssh-keygen -t rsa -C "1416244864@qq.com" 3.查看远程仓库信息 git remote -v 4.删除与远程仓库关联 git remote rm origin 5.提交远程信息 git push origin master 分支 1.查看分支:git branch 2.创建分支:git branch 3.切换分支:git checkout 或者git switch 4.创建+切换分支:git checkout -b 或者git switch -c 5.合并某分支到当前分支:git merge 6.删除分支:git branch -d 处理冲突 and 1.git switch -c feature1 2.修改文件 3.git add / git commit 4.git switch master 5.修改文件 6.git add / git commit 7.合并 git merge feature1 8.处理冲突 / git add /git commit 9.查看 分支合并情况 git log --graph --pretty=oneline --abbrev-commit 使用与不使用 Fast forward 得差别 $ git log --graph --pretty=oneline --abbrev-commit * e5e5ea9 (HEAD -> master) 测试不使用no-ff有什么区别 * d4ae3ff 合并分支 使用 --no-ff |\ | * cf99c0a 创建分支dev |/ 处理bug 问题:在dev分支开发中,突然有个bug要修复,需要并且要合并到master 处理:先把dev得工作存起来,从master创建一个bug-100分支处理,然后合并到master,恢复dev工作环境,把bug-100的提交合并过来 小结: 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场; 在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。 Feature分支 git branch -D feature-vulcan 大写D 强制删除 开发一个新feature,最好新建一个分支; 如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。 分支 1.push分支到远程仓库 git push origin dev 2.拉去远程分支到本地 git checkout -b dev origin/dev 小结 查看远程库信息,使用git remote -v; 本地新建的分支如果不推送到远程,对其他人就是不可见的; 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交; 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致; 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name; 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。 git rebase rebase操作可以把本地未push的分叉提交历史整理成直线; rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。 tag 标签 tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。 git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id; git tag -a -m "blablabla..."可以指定标签信息; git tag可以查看所有标签。 git show 可以看到说明文字 操作tag git push origin 可以推送一个本地标签; git push origin --tags可以推送全部未推送过的本地标签; git tag -d 可以删除一个本地标签; git push origin :refs/tags/可以删除一个远程标签。 本地仓库可以同时关联github和gitee git remote add github git@github.com:michaelliao/learngit.git git remote add gitee git@gitee.com:liaoxuefeng/learngit.git git push github master git push gitee master 配置忽略文件 https://github.com/github/gitignore # 排除所有.开头的隐藏文件: .* # 排除所有.class文件: *.class # 不排除.gitignore和App.class: !.gitignore !App.class 忽略某些文件时,需要编写.gitignore; .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理! git add -f强制添加进去 可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查 git check-ignore -v App.class 别名 git config --global alias.st status git config --global alias.co checkout git config --global alias.ci commit git config --global alias.br branch git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 其他 搭建Git服务器非常简单,通常10分钟即可完成; 要方便管理公钥,用Gitosis; 要像SVN那样变态地控制权限,用Gitolite。