Git总结

从上次实习结束到现在刚入职, 时隔快半年了, 好久没用git, 连基本命令都忘的差不多了. 今天就总结一下, 做个复习.

跟着本篇文章, 从头到尾照着敲一遍, 即可快速学习(复习)常用的git操作.

创建仓库

首先创建一个名叫"test"的库.

例如github的话, 就是点击New repository 按钮

然后在Repository name处输入"test"即可. 点击create repository 就创建了.

然后在本地创建一个test文件夹.

mkdir test
cd test

 初始化本地仓库

git init

其中的`.git`文件夹里就包含了git的相关信息.

创建README.md文件, 并将内容"abcdefg"写入进去:

echo "abcdefg" >> README.md

 然后添加远程仓库, 并将README.md上传到远程仓库.

git add README.md                                                   # 将变化添加到暂存区
git commit -m "上传README.md文件"                                    # 将暂存区里的改动给提交到本地的版本库
git remote add origin git@github.com:GoldArowana/test.git           # 添加远程仓库
git push -u origin master                                           # 提交到master

 然后就可以看到github里的test仓库里就有了README.md文件:

git add 命令

git add 可以将本地仓库的变化添加到暂存区.

touch a.txt    # 创建文件
git add a.txt

 可以用git add <具体文件名> 来一个一个添加文件.

也可以用 `git add .  ` 命令来添加所有的变动.

touch b.txt
touch c.txt
git add .          # 等价于  git add b.txt   +  git add c.txt

git status

git status命令可以查看工作目录和暂存区的状态.

touch d.txt
git status

这是git status命令所查看到的结果.

绿色的a.txt  b.txt  c.txt 是之前用git add命令已经添加到暂存区里的.

红色的d.txt是刚刚创建(刚刚发生了改变), 但还没添加到暂存区里的.

git rm --cached

git rm --cached命令可以让文件从暂存区移出.

首先咱们先看一下当前的状态:

git status

 

 接下来咱们把d.txt添加到暂存区中

 然后咱们看一下现在的状态.

接下来就是掩饰git rm --cached命令的时候了. 想把d.txt移出暂存区, 也就是让d.txt从绿色再变回红色.

git rm --cached d.txt

 然后再看一下暂存区状态:

git commit

git commit命令会将暂存区的内容提交到git的本地版本库中.

先 git status看一下当前的暂存区状态:

绿色的三个文件是暂存区中的. 执行commit操作后, 这三个文件将会被提交到git本地版本库中.

git commit -m "提交a b c 三个文件"

 其中 -m后面是提交的注释.

这样就把这三个文件提交到git本地版本库了.

git log

刚刚已经commit操作进行提交了. 之后可以使用git log命令来查看提交记录.

git log

在这里可以看到提交的id (sha1摘要值), 和提交的分支, 日期, 备注 等内容.

按`q`健即可退出这个界面.

显示最近一条日志:

git log -1

显示最近两条日志:

git log -2

以一条日志占一行的形式进行显示:

git log --pretty=oneline

git log --graph                            # 图形化显示分支

git log --graph --abbrev-commit            # --abbrev-commit 的作用是只显示sha1摘要的前几位.

git checkout --

git checkout -- 可以撤销对代码的修改.

首先咱们先看一下a.txt文件:

可以看到a.txt里面内容为空. 咱们写入"123456"内容到a.txt中.

已经修改了a.txt   同时可以在status命令看到状态, a.txt是[修改]状态:

接下来执行git checkout -- <文件名> 即可撤销修改.

git checkout -- a.txt

 撤销修改后看一下a.txt的内容, 发现为空:

看一下暂存区状态:

git reset Head

从暂存区中恢复到工作区.(也就是绿色变回红色)

 修改一下a.txt.

echo "123" >> a.txt

 然后git status查看一下状态:

然后用add命令添加到暂存区中:

git add a.txt

 git status后会发现a.txt被添加到了暂存区中(也就是变绿了). 

接下来, 用reset命令, 让a.txt从暂存区重置到工作区中(也就是绿色再变为红色):

git reset Head a.txt

 可以看到a.txt又回到了工作区中: 

git rm

a.txt文件现在是modified状态:

用a.txt来演示git rm的话, 需要先用checkout命令将修改撤销:

checkout -- a.txt

 可以看到a.txt的修改已经被撤销了. 

接下来可以开始演示git rm了:

git rm a.txt

 执行完git rm之后, a.txt被删除了:

而且本次删除还被提交到了暂存区中(变绿了):

恢复 `git rm` 删除操作

如果用git rm命令删除了a.txt文件, 想要再恢复, 怎么办呢?

先用reset命令,  将a.txt置回工作区中(也就是让他从绿色变成红色):

git reset HEAD a.txt

 然后执行git status命令就可以看到a.txt已经变为红色了:

 接下来就要用checkout命令来撤销删除操作了:

git checkout -- a.txt

 然后你就能看到a.txt文件又恢复了:

git branch

查看分支:

git branch

  按q即可退出. 可以看到有且仅有一个分支 `master`.

基于当前分支, 创建一个新的分支 `king`:

git branch king

 然后再git branch查看一下分支情况:

, 可以看到两个分支了. 一个是master, 一个是king. 其中master为绿色, 表示当前分支. 新增的king分支是基于当前分支`master` 新建的.

查看所有分支的最近一次提交:

git branch -v

 删除`king`分支(注意, 不能删除当前分支.  想要删除当前分支, 就得先切换到另一个分支.):

git branch -d king

 强制删除 (其中, `king` 是分支的名字):

git branch -D king

git checkout

git checkout 可以用于切换仓库.

首先咱们新建一个仓库`repo2`:

git branch repo2

 查看一下分支情况:

git branch

, 可以看到多出了一个repo2分支, 当前分支为master.

接下来咱们切换到repo2分支中:

git checkout repo2

 git branch可以看到: 

, 发现当前分支是repo2了 (绿色表示当前分支)

刚刚咱们首先创建了一个分支, 然后再进入到了这个新的分支中. 这两个步骤可以合并为一个命令. 下面这一句命令, 就是"创建repo3分支, 并切换到repo3分支" :

git checkout -b repo3

 ,  发现repo3分支已经创建, 并且当前分支就是repo3了.

 切换到上一个分支:

git checkout -

, 执行1次,就是切换到上1次的分支; 执行2次, 就是切换回原来的分支. 也就是来回切换.

git reflog

git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作):

git reflog

git merge

首先查看一下当前分支状态:

git status

 然后咱们把d.txt  e.txt  添加到仓库中, 并推到远程仓库.

git add .
git commit -m "添加d.txt 和 e.txt"
git push --set-upstream origin repo2
ls

 切换到repo3仓库:

git checkout repo3
ls

接下来, 把 repo2  合并  到 repo3(当前分支)   分支上:

git merge repo2
ls

, 可以看到repo2仓库里最新修改(新增了d.txt  e.txt)已经合并到了repo3中.

 

关于merge --no-ff 和 --squash 的区别 :   https://segmentfault.com/q/1010000002477106 

 

 

 

 

 

 

 

 

git commit -am ""      https://segmentfault.com/q/1010000005900988

 

未完待续

 

git config --local user.name "arowana"

git config --local user.email "arowana.java@qq.com"

 

posted @ 2018-12-09 14:51  GoldArowana  阅读(315)  评论(1编辑  收藏  举报