git 常用命令

笔记参考自以下链接:

git官方网站 https://git-scm.com/

git小书 https://git-scm.com/book/zh/v2

阮一峰 git_cheat_sheet http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

### 经常使用的git命令

 

git add ./xx文件
git status
git diff xx文件

git commit -m '注解'
git diff --staged/--cached

git log -p

git rebase xx分支
git merge xx分支

git pull origin xx远程分支
git push origin xx远程分支

git stash =>git stash pop
多次stash =>git stash apply(应用最近的一个stash)
git stash list => git stash apply stash@{2}

 

 

 (0)注意事项

( a ) 一定想着建分支(无论是改bug,还是新的feature)
( b ) 每次操作git要多用git status
( c ) git commit -m '注释' 注释一定要写的简洁明要

 

(1) git 简单流程

git add .
git commit -m "代码描述"
git push origin master  //远程仓库的默认名称为origin

(2)将本地a分支上传到远程a分支上

git add .     //在a分支上
git commit -m "代码描述"
git checkout master

git pull origin master  //在master分支上,拉下远程master上最新代码,与本地代码合并。有冲突则解决,无冲突则继续
git checkout a

git rebase master   //在分支a上,将分支a和master上代码融合,有冲突则按照提示解决
git push origin a

 (3)git基础知识

1,获取git仓库 

git init  //从现有的项目或目录导入所有文件到git中
或
git clone xx@github.com //从一个服务器克隆现有的git仓库

2,添加文件到git仓库

git add <file1> <file2> //或git add . 添加所有的文件到index/stage中
git status  //一定要在git commit 之前查看是否还有未添加的文件
git commit -m '代码描述'

 目前git本地仓库内仅有两个commit记录 

 

      文件的状态变化周期

 

 (1)在当前分支下,创建一个新的文件 

echo 'this is a test'>>'test.text'  //新建一个有this is a test的内容的test.text文件
//echo 'add one line'>'test.text   //使用>只会每次替换原来的内容;>>会新加一行内容
cat test.text  //查看test.text的内容
vi test.text   //打开test.text文件
//vim 同vi 一样,有两种工作模式:命令模式,编辑模式(对文件进行增删查改)
//(1)输入字母i或insert,进入编辑模式
//(2)保存文件:esc退出编辑模式,进入到命令模式
         在命令模式下,ZZ:wq为保存修改并退出vim
                :w保存修改,仍在命令模式
//(3)放弃修改:esc退出编辑模式。进入到命令模式
         在命令模式下,:q!放弃修改并退出vi
                :e!放弃修改,仍在命令

 (2)查看状态 git log / git status / git diff <file>

git status //查看工作区的状态,查看哪些文件被改动

说明工作区比较干净,所有的改动都已经添加到本地仓库内

 

git diff <file> //查看该文件具体有哪些改动

 

git log //查看从最近到最远的提交日志
git log --graph --pretty=oneline --abbrev-commit //以tree型展示提交记录

     

 

git log --pretty=oneline //查看提交日志的commit id号

 

 3,在版本之间穿梭 git reset --hard commit_id

(1)版本回退:过去版本

git reset --hard HEAD^ //回退到过去:上一个版本(现在只剩一个commit日志了), HEAD^5回退到上5个版本
git reset --hard f7c7a //回退到commit id为f7c7a……的版本,不需要写全,git会自己去找

 

(2)版本找回:未来版本(回退后悔药)

git reflog //查看每一次的记录
git reset --hard f7c7aba //去到未来:版本f7c7aba……

 

4,撤销修改

(1)放弃在工作区的修改 git checkout -- test.text   // git checkout -- <file>用本地仓库中的版本替换工作区的文件

(2)放弃在暂存区的修改 git reset HEAD test.text +(1)

(3)放弃在本地仓库的修改 git reset hard commit_id + (2) +(1)

 

5,删除文件

(1)工作区删除文件 rm test.text

(2)在git上也要删除文件记录 git rm test.text

万一在git上删除错误,想要撤销 git checkout -- test.text

 

6,分支管理

(1)新建分支/删除分支

git branch test //新建一个叫test的分支,并切换到test分支上
git checkout test
==
git checkout -b test

git branch -d test //删除一个叫test的分支
git branch -D test //强行删除一个从未合并过的分支test

(2)查看本地分支、远程分支

git branch //查看本地分支
git branch -a //查看远程分支

当前分支会有*,且为绿色

(3)合并某指定分支到当前分支

git merge <分支名>

(4)合并中出现冲突

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,根据git提示,找到对应位置,然后解决冲突,然后再git add <刚刚修改的文件>; git commit -m '注释'

(5)bug分支 git stash / git stash pop 

故事前提提要:你在test分支上开发,但是现在主分支上有bug需要修复,但是你在test分支上工作并没有完成,不想commit。

解决方法:

git add .
git stash //在test分支上,将所有代码暂时先储藏起来
git checkout master //切换到有bug的分支上,然后在该分支上新建bug解决分支

git checkout -b issue-001 //然后在该issue--001分支上解决所有问题
git add .
git commit -m 'issue-001'
git checkout master

git merge issue-001 //将master与issue-001分支上合并
git add. 
git commit -m 'fix issue-001'
git checkout test //切到当初正在工作的分支test
git stash pop //将原来的代码取出,并销毁stash记录
==
git stash apply
git stash drop

 (6)多人协作

git remote //查看远程仓库信息  或 git remote -v 
git checkout -b branch-name origin/branch-name  //本地创建与远程分支对应的分支branch-name
git branch --set-upstream branch-name origin/branch-name  //建立本地分支与远程分支的关联

 

7, 标签管理

git tag //查看所有标签,标签显示为字母顺序而不是时间顺序
git show v1.2  //显示标签v1.2的具体信息

git tag tag-name  //在需要的分支上,默认最新的commit上,一般为类似v1.2
git tag -a v1.2  -m  "version 1.2 released"  //-a显示标签名,-m显示说明文字
git tag tag-name commit_id //给某一个commit_id添加一个标签

git tag -d v1.2  //删除标签v1.2,且标签只会存储在本地,不会自动上传到远程仓库
git push origin :refs/tags/v1.2  //在远程仓库删除远程标签

git push origin v1.2 //推送一个本地标签
git push origin --tags  //推送全部未推送过的本地标签

 

posted @ 2018-07-01 14:49  小字辈  阅读(153)  评论(0编辑  收藏  举报