Git操做梳理

参考教程:廖雪峰Git教程git

基本操做

建立基本库

git init // 把这个目录变成Git能够管理的仓库

添加并提交到当前分支

git add 文件名 // 添加到仓库;若是不写文件名写.的话则为增长全部改变的文件
git commit -m "注释文字" // 提交到仓库,且只会提交add到仓库的变化
// commit就像一个快照:一旦你把文件改乱了,或者误删了文件,还能够从最近的一个commit恢复,而后继续工做,而不是把几个月的工做成果所有丢失
add以后版本库内部:

clipboard.png

commit以后版本库内部

clipboard.png

查看当前状态

git status // 主要能够查看改动的文件有没有add,有没有commit

查看文件内容

cat 文件名

查看修改内容

git diff 文件名 // 查看文件在被添加(add)仓库以前作了哪些改动,是工做区(work dict)和暂存区(stage)的比较
git diff --cached // 是暂存区(stage)和分支(master)的比较

删除文件

git rm 文件名
git commit -m "remove" //确认删除
// 删除以后可用git checkout -- 文件名 恢复删除文件

版本管理

查看版本提交日志

git log // 只能看到在目前版本次以前的历史版本,看不到目前版本以后的版本
git reflog // 看到全部版本的提交日志
// 退出操做直接按q便可,或者 esc -> : -> q

版本回退

git reset --hard HEAD^ //回退到上一版本,HEAD表示当前版本,而后根据^数量判断向上回退多少个版本
git reset --hard HEAD~100 //回退到100个版本以前,当数量比较多时,用~100表示100个^
git reset --hard 短版本号/长版本号前几位 // 能够经过查看版本提交日志找到版本号
git reset HEAD 文件名 // 把暂存区的修改回退到工做区,即取消add操做;上面三种均可视为取消commit操做(只要没有push到远程库)

撤销修改

git checkout -- 文件名 // .表示全部文件,让这个文件回到最近一次git commit或git add时的状态

分支管理

多人协做模式:

  1. 试图正常push本身的修改
  2. 推送失败,说明远程分支比你的本地分支更新,须要先抓取分支
  3. 合并有冲突,则解决冲突并提交
  4. 再次正常push本身的修改

建立和切换分支

git checkout -b dev // 建立并切换到dev分支
// 注意建立分支的意思是在一个新的分支上有着和master/建立以前时的当前分支同样的代码
git branch dev // 建立dev分支
git checkout dev // 切换到dev分支

查看分支

git branch // 查看有哪些分支,当前分支前面有*标志

合并分支

git merge dev // 合并dev分支到当前分支
git merge --no-ff -m "xxxxxx" dev // 禁用Fast forward模式

禁用Fast forward模式下的合并逻辑以下图所示:
clipboard.pngapp

删除分支

git branch -d dev // 删除dev分支

解决冲突

冲突主要指的是发起合并的分支和被合并的分支都有增长并提交相应的内容,且二者大几率状况下是没法一致的,就会引起冲突。
发生冲突以后,Git会用<<<<<<,=======,>>>>>>>这样的符号在发生冲突的文件中标记出实际冲突的内容。
根据标记内容对须要对双方内容进行综合考虑(通常是发起合并的分支)并提交的文件进行处理而后再正常add和commit便可
贴士:干活都在分支上,只有发布在master分支上fetch

临时分支

git stash // 把如今保存可是没有add commit的内容暂时封存起来
git checkout -b ano // 建立分支,没有未add,commit的修改
git stash list // 能够看到保存的工做内容
git stash apply stash@{0} // 恢复以前保存内容
git stash drop // 删除已经恢复的保存内容
git stash pop // 恢复的同时把stash内容也删了

推送分支

git push origin 分支名 // 若是是第一次推送须要 git push -u origin 分支名
// origin是远程库的默认名,可更改为其余的

抓取分支

git pull // 或者用下面的2步操做来代替
git fetch origin master 
git merge origin/master

远程与本地的同步

// 远程有分支而本地没有
git pull // 或者用另外一种抓取方法
git checkout -b 拉取的分支名 origin/拉取的分支名
// 本地有而远程没有
git push origin 分支名 // push到远程会自动建立
相关文章
相关标签/搜索