Git命令笔记

1. 创建版本库

$ mkdir learngit
$ cd learngit
$ pwd #显示当前所在目录
/learngit

 

2. 初始化

$ git init

 

3. 添加提交

$ git add readme.txt #告诉git我们添加了readme.txt,可以多次添加,一次提交
$ git commit -m "版本说明"

 关于添加和提交的一些说明

#git add 的各种区别:
git add -A   // 添加所有改动
git add *     // 添加新建文件和修改,但是不包括删除
git add .    // 添加新建文件和修改,但是不包括删除
git add -u   // 添加修改和删除,但是不包括新建文件

#在 commit 前撤销 add
git reset <file> // 撤销提交单独文件
git reset        // unstage all due changes

#add/commit 前撤销对文件的修改:
git checkout -- README.md  // 如果你误删工作区实体文件,可以通过这个命令,将master最新版本还原到工作区

 

3. 查看

$ git status #如果修改了文件,状态会提示你有文件被修改(但不能告诉你哪里被修改),提示你要commit
$ cat readme.txt #查看实体文件的内容 
$ git ls-files #查看哪些文件在版本控制下

-----------------------------------------------------------------------------------
查看当前目录下有哪些远程仓库
 
$ git remote #远程仓库名字
$ git remote -v #verbose的缩写,显示详细信息,包括项目url
需要注意的是,当前Git Shell在不同目录下,git remote显示的远程仓库就不同

-----------------------------------------------------------------------------------
查看提交的历史
$ git log --pretty=oneline --abbrev-commit

-----------------------------------------------------------------------------------
查看不同的地方(修改)
$ git diff #是工作区(work dict)和暂存区(stage)的比较
$ git diff --cached #是暂存区(stage)和分支(master)的比较
意思就是说,我们修改文件并保存实体文件,可以使用git diff查看不同之处,再确定是否add到暂存区,保存到暂存区后可以用git diff --cached查看stage暂存区和master分支的不同之处,决定是否commit
$ git diff HEAD -- readme.txt  #比较工作区和master最新版本readme.txt的不同

 


4. git日志

    这个显示从初始版本到当前版本的信息

$ git log #可以查看who在when修改了文件(会写出版本说明),但是这个看着眼花缭乱
$ git log --pretty=online #这样,每行只显示一次修改,修改信息只有:commitid + 版本说明

   这个显示所有修改的日志

$ git reflog

 

5. 回滚到历史版本

#第一种方法
$ git reset --hard HEAD^ #HEAD是当前版本,HEAD^是上一个版本,HEAD^^是上上个版本,HEAD~100是前100个版本

#第二种方法
$ git reset --hard 04c632e244 #hard后面这一串字符是commit id,只要前面几位就ok,但是如果我们关掉git,想恢复到之前的新版本,但是不知道id了,那就要用第三种方法了

#第三种方法
$ git reflog #可以显示你所做的修改日志,最前面有id,然后再用第二种方法回滚

 

6. 撤销修改

  6.1 撤销工作区修改用

$ git checkout -- readme.txt #注意--之后又空格

#第一种
#实体文件被修改,还没add
#这个就会将工作区实体文件回滚到master最新版本

#第二种
#修改了一次,add到stage
#然后又修改了工作区实体文件
#这个就会将工作区实体文件回滚到stage的版本

   6.2 撤销暂存区修改

$ git reset HEAD readme.txt

#master :1,stage:2
#意思是,已经修改了并add到stage,使用上面命令,可以撤销stage里的状态2(unstage),此时stage就回滚到master的状态1

   6.3 撤销版本库的修改

参考  7.回滚到历史版本

  

7. 删除文件

$ rm readme.txt  #删除工作区的实体文件
$ git rm readme.txt #删除工作区和暂存区文件,commit后版本库也将删除,如果不commit,版本库未删除,那么 git checkout -- readme.txt可以将版本库恢复到工作区。 

  

8. 添加远程仓库并推送

$ git remote add [shortname] [url] #shortname是你命名的远程仓库名字,url格式如下:git@github.com:github_account/repository_name.git

-----------------------------------------------------------------------------------------------------------------------------
$ git remote add learn_git git@github.com:wongbingming/my_repository.git  #注意记得先在GitHub上先新建仓库,my_repository,不然后面推送会出错

$ git push -u learn_git master #learn_git是之前命名的远程仓库名,master是你要推送到的远程仓库的分支名字

  

9. 从远程库克隆

$ git clone [github url]

#举例
$ git clone git@github.com:BingmingWong/test.git

  

10. 分支

  10.1. 新建,切换,删除分支

git checkout -b dev #创建dev分支,把HEAD指针切换到dev
# git check -b表示新建并切换,相当于下面两条命令
------------------------
# git branch dev 新建
# git checkout dev 切换
------------------------
# git branch 查看所有分支,*表示当前分支


# do something change,then add and commit
git commit -m "sometext" #提交,生成新的

git checkout master #把HEAD指针重新指向master
git merge dev #把dev合并到当前master分支

git branch -d dev #删除dev分支,删除是dev不能是当前分支,如果dev之前和远程仓库同步过,这次要删除前如果有修改需要先同步才能修改,不然需要用-D

   10.2. 两个分支都修改了合并冲突问题

  解决冲突

  10.3. 合并分支

 

分支管理策略
#
git merge 默认使用Fast Forward快速合并,这种不会留下合并信息 # git merge --no-ff -m "sometext" 由于不采用快速合并,会生成一次commit,所以需要-m 说明,这个好处可以查到合并信息

  10.4. 本地分支与远程分支 

1. 本地分支如果和远程分支同名,push时只要写一个分支名即可
2. 如果不同名,可以使用"git push -u origin local_branch_name:romote_branch_name"

 

 

11. 保存现场stash

# 背景设定
# 假如我们当前正在dev分支工作,但是master主分支有bug需要紧急修复,但是dev的工作才进行到一半,完成还需要一天,我们想在不提交的情况下,把bug修复好,改怎么做?

#这时候就可以用git stash,保存
#然后切换到master修复bug,修复完成后再切换到dev
#使用"git stash list"查看保存的list
#那就使用命令"git stash pop"(如果list中有多个stash,可以使用git stash apply stash@{1})
#"git stash pop"(在恢复的时候,同时把stash内容也删了)=="git stash apply"(恢复)+"git stash drop"(删除stash内容)

  

12. vi的使用

1. 进入vi模式后,先按I,切换成插入模式
2. 修改文本内容
3. 按Esc,退出插入模式
4. 键盘敲":x",保存并退出

  

13. 标签

标签的意义
1. 标签的作用相当于commit ID
2. 区别在于commit ID是机器生成的,不便于记忆和可读性,tag是人为设定的,有特殊意义,有很强的可读性

如何打标签
首先切换到你要打标签的分支上,通常是master
$ git tag v1.0  #给当前分支打上v1.0的标签
$ git tag v1.0 6a5819e #如应该在之前版本打的标签没打,可以这样补打
-------------------------------------------------------------------------------
$ git tag  #显示当前分支的所有标签
$ git show v1.0 #查看v1.0的信息:commit ID,Author,Date
--------------------------------------------------------------------------------
$ git tag -a v1.1 -m "version 1.1 released" 3628164 
# -m 添加说明文字,-a v0.1:使用git show v1.1,有tag的信息


标签不自动push到远程
若要push,可以使用命令
$ git push origin v1.0  #推送单个tag
$ git push origin --tags  #一次性推送所有tag


删除标签
1. 本地删除
$ git tag -d v1.0  #删除标签v1.0
2. 远程删除(如果已经推送到远程,要先本地删除,再远程删除两个步骤)
$ git push origin :refs/tags/v1.0

#要查看是否远程删除了,可以上GitHub上看

 

14. GitHub代码更新合并到本地

$ git merge origin/master

 

15. 创建SSHkeys

$ ssh-keygen -t rsa -C "youremail@example.com"

一路回车然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码

然后就会生成id_rsaid_rsa.pub 两个文件

其中id_rsa是私钥,不能泄露

id_rsa.pub是公钥,可以放心告诉别人,而我们也只需要这个公钥,来连接我们GitHub。

创建完成后,使用如下命令查找位置

$ find / -name id_rsa.pub

 

posted @ 2017-06-01 23:25  王一白  阅读(276)  评论(0编辑  收藏  举报