https://www.liaoxuefeng.com/wiki/896043488029600/896827951938304
简介
Git使用C开发,分布式
命令
-
git init:初始化
-
git add <file>:添加文件到仓库,实际上是将文件修改添加到.git的暂存区
-
git commit -m <message>:提交文件,实际上是将暂存区的所有内容提交到当前分支
-
git status:查看工作区状态
-
git diff:查看修改内容
<文件修改后,status输出“Changes not staged for commit:”>
<文件add后,status输出“Changes to be committed:”>
<文件commit后,status输出“nothing to commit, working tree clean”>
-
git log:查看历史记录
-
git reflog:查看历史命令,方便查看commit id,回到未来的版本
-
git reset --hard HEAD^:回退到上个版本
-
git reset --hard HEAD~100:回退到100个版本之前
-
git reset --hard <commit id>:回退到具体版本
-
git checkout -- <file>:丢弃工作区修改,意思是工作区的文件回到最后一次add或者commit的状态(修改的东西还没add到缓存区时使用)(其实是用版本库版本替换工作区版本)
-
git reset HEAD <file>:暂存区的修改撤销掉(修改的东西add了还没commit使用)
<没add,直接checkout>
<add了没commit,先reset HEAD,将暂存区撤销,然后再checkout,将工作区的丢弃>
<commit了,回退版本>
-
git rm <file>:删除版本库中文件,再commit提交
<删除对了:OK>
<删除错了:git checkout --file,被误删的文件就可以恢复到版本库版本>
远程仓库
github,本地git仓库和github之间传输通过ssh加密,所以需要在github设置中添加ssh key
git支持多种协议,包括https,但通过ssh支持的原生git协议速度更快
先有本地库 后有远程库
$ git remote add origin git@github.com:LastJason/learngit.git
关联本地库和远程库,添加后,远程库的名字就是origin,是git默认的叫法
$ git push -u origin master
将本地库的内容推送到远程,实际上是将当前分支master推送到远程
-u参数可以将本地master分支和远程的master分支关联起来,在以后的推送和拉取时就可以简化命令
$ git push origin master
将本地master分支修改推送到github
先远程库,后本地库
$ git clone git@github.com:LastJason/gitskills.git
克隆库
分支
git branch
查看分支
git switch <name>/git checkout <name>
切换分支
git branch <name>
创建分支
git switch -c <name>
创建并切换分支
git merge <name>
合并某分支到当前分支
git branch -d <name>
删除分支
git branch -D <name>
强制删除
[图片上传失败...(image-e0087b-1579070341521)]
解决冲突
冲突使用git status查看冲突文件,打开文件编辑
Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容
使用git log –graph查看分支合并情况
分支合并
- 一般情况,git会使用fast forward模式来合并,但是这种模式下,删除分支后,会丢掉分支信息
- 强制禁用fast forward模式后,git会在合并时生成一个新的commit,这样就可以在分支历史上看到分支信息
[图片上传失败...(image-d9119f-1579070341522)]
分支策略
- master分支非常稳定,仅用来发布新版本,平时不干活
- dev上干活,发布版本时合并到master上
- 每一个人都有自己的分支,时不时往dev上合并
[图片上传失败...(image-ac0d61-1579070341522)]
bug分支
-
软件开发遇到bug,可以通过新建一个临时分支,在临时分支上修改最后合并的方式来修复
-
但是假如你工作到一半,还没提交,还要一天,但是bug现在就要改怎么办
1. git stash 可以把当前工作现场储存起来,等以后恢复现场,然后继续工作 2. git checkout master git checkout -b new-issue1 确定要在哪个分支上修复bug,在哪个分支修改就在哪个分支创建临时分支 3. 修改bug 4. git add readme.txt git commit -m "info" 提交更改 5. 修复完成后,切换到master分支完成合并,然后删除临时分支 git checkout master git merge --no-ff -m "merge" new-issue1 6. git checkout dev 回到工作分区 git stash list 查看储存的工作现场 git stash pop(git stash apply,git stash drop) 恢复工作现场并删除stash临时内容(恢复工作现场,删除stash临时内容)
-
假设master里面的bug改掉了,但是你现在的工作区是很久前的分支,这个bug在你的工作分支依旧存在,不用再修改一次,直接把master的修改内容复制到dev就可以
git cherry-pick commit_id 复制commit_id对应的这次修改到当前分支
推送分支
-
远程库
1. git remote 查看远程库的信息 2. git push origin master 将origin推送到master(将origin分支上所有本地提交推送到远程master库) 3. git pull 拉取远程库进行合并 4. git branch --set-upstream-to <branch-name> origin/<branch-name> 关联本地分支和远程分支(假如提示 no tracking information就这样)
标签管理
-
发布版本时,会将这个版本打个标签,tag就是一个让人容易记住的名字,和某个commit绑定
把上次那个打包发布一下,commit号6a5819... 把上次那个打包发布一下,版本号v1.2
-
创建标签
1. git checkout <branch-name> 切换到对应标签 2. git tag <name> 添加标签 3. git tag 查看所有标签 4. git show <tagname> 查看标签信息 5. git tag -d <tagname> 删除本地标签 6. git push origin <tagname> 推送一个本地标签 git push origin --tags 推送所有本地标签 git push origin :refs/tags/<tagname> 删除一个远程标签
忽略特殊文件
- 创建特殊文件 .gitignore ,然后将不希望提交的文件名写进去就可以
网友评论