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"
学如不及,犹恐失之