git 学习整理 (上 本地仓库)

312 阅读4分钟

我这里是尽可能地整理一份讲究原为的开发手册。如果想详细的了解git,建议去看看廖雪峰老师的git教程就好了。好!废话不多说,上代码。

跳过安装环节

1.自报家门

    git config --global user.name "..."
    git config --global user.email "..."

2.建本地仓库

git init

回访建议:

初始化本地仓库的时候,git会自建一个master主仓库。此时强烈建议先commit一条记录。因为git是参照改变做的操作。如果你没个初始的改变记录,然后在git里乱逛,待会就回不来了。

原理:

工作区和暂存区

平常我们操作的目录就是工作区

3. 将工作区的操作添加到暂存区(staged)

git add .
git add demo.txt
. 是任何。

4.将暂存区的操作提交成一次提交(commit)到当前分支

git commit -m '备注的内容'

注意:只能把当前暂存区的提交到分支。如果是在工作区操作但是没有 git add .添加到暂存区,这样并没有保存当前改变。

5.查看当前状态 (工作区&暂存区)

git status

5.1. 查看当前版本库日志

git log

注意:用q退出查看模式

6.撤销改变

6.1.撤销工作区

回到最新的commit或暂存区
git checkout -- file 注意 --,没有--就是切换到另一个分支的命令
git checkout -- demo.txt
git checkout -- . (小心点用)

6.2. 撤销暂存区

git reset HEAD <file>
git reset HEAD .

6.3. 回退版本

git reset --hard HEAD^
git reset --hard 5155902

--hard  指针的意思
HEAD    当前版
^       上一个版本
^^      上上个版本
~100    上100个版本
commit id 
注意:如果当我们回退之后又想回来。这时 git log 也无法看到之前的commit id。但使用之前commit id 也是可以回退。

7.删除文件

rm <file> linux
git rm <file>
git commit -m '内容'

注意&恢复

rm 删除文件后 git checkout -- 可以回复文件。不过因为一些编辑器有缓存功能,你会以为其他文件没有回退

git checkout -- . 恢复时当前本地目录如果有版本库里的文件名(刚删除的文件。+后缀)则会被版本库里的覆盖。如果没有git会报错

fatal: pathspec 'rm.txt' did not match any files

8.本地分支管理

8.1. 查看当前分支

git branch

8.2. 创建分支

git branch <分支名>
git brach dev

8.3. 切换分支

切换分支时git会提醒要先commit。这是因为git的是管理变化的。其实我们的每一次commit就是一个变化。
error: Your local changes to the following files >would be overwritten by checkout:
      demo.txt
Please commit your changes or stash them before you >switch branches.
Aborting
git checkout <分支名>
git checkout dev

8.4 创建+切换

git chekout -b <分支名>
git chekout -b dev

8.5. 合并某分支到当前分支

git merge <分支名>
git merge demoBranch
突然掉到vim中,怎么输入都无效。网上文章有效,这里就不细讲。

8.5.1. 解决冲突

当我们修改的内容冲突的时候,git就会提示我们需要手动修改,并用<<< ==== >>>把不同显示出来。

页面:

<<<<<<< HEAD
德玛西亚德玛西亚德玛西亚德玛西亚德玛西亚git
=======
德玛西亚德玛西亚德玛西亚德玛西亚德玛西亚vim
>>>>>> demoBranch

bash: Auto-merging demo_branch.txt CONFLICT (content): Merge conflict in >>demo_branch.txt Automatic merge failed; fix conflicts and then commit the result.

这时我们手动确认需要保留后在commit就好。

8.6. 删除分支

git branch -d <分支名>
git branch -d demoBranch
提示没有完全合并,忘记commit。git 也提示可以强制删除 git branch -D demoBranch。

error: The branch 'demoBranch' is not fully merged. If you are sure you want to delete it, run 'git branch -D demoBranch'.

8.7. 禁用Fast forward模式

我这里直接给代码,有什么疑问可以看廖老师的相关文章
--no-ff参数,表示禁用Fast forward模式
git merge --no-ff -m'merge ' demoBranch

9.保存工作区

从前面的学习我们已经知道了如果在各个分支之间切换。不过呢,分支这种正规(依靠每次的commit)的东西,不一定适合开发中各种琐碎的临时事情。就像廖老师说的万一有个几分钟搞定的bug,那它就不足以我们commit一下了。如果我们不用commit也能把现在的工作区保存下来就Ok了。(学到这里不得不佩服大牛们啊。)
git stash 

9.1. 查看保存区

git stash list

10. 配置别名 alias.(用完回不去的东西)

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'  清除暂存区
--git unstage demo.js
git config --global alias.last 'log -1'  最后一次提交
--git last
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
--git lg (用着超爽)

11. 忽略提交 .gitignore

vim .gitignore 创建文件
/node_modules 指定目录
*.js    指定类型文件