git安装初始化
- 用户名:
git config --global user.name "Your Name"
- 电子邮件:
git config --global user.email "email@example.com"
本地库操作
- 创建目录文件夹:
mkdir learngit
- 更改到创建的目录文件夹:
cd learngit
- 显示目录文件:
pwd
- 把目录变成Git可以管理的仓库:
git init
- 显示隐藏的文件夹:
ls -ah
- 把文件添加到仓库:
git add readme.txt
- 把文件提交到仓库:
git commit -m "wrote a readme file"
** -m 后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。**
** 为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件。 ** - 时刻掌握仓库当前的状态:
git status
- 看看具体修改了什么内容:
git diff
- 查看历史记录:
git log
** 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数 ** - 回退到上一个版本:
git reset
** 在Git中,用HEAD表示当前版本,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。 ** - 查看文件内容:
cat readme.txt
- 指定回退到某个版本:
git reset --hard 3628164
- 记录你的每一次命令:
git reflog
** 找不到新版本的commit id怎么办?在Git中,总是有后悔药可以吃的。当你用git eset --hard HEAD^
回退到add distributed版本时,再想恢复到append GPL,就必须找到ppend GPL的commit id。Git提供了一个命令git reflog
用来记录你的每一次命令 **
*** HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。穿梭前,用git log
可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。*** - 丢弃工作区的修改:
git checkout -- file
# file是要丢弃修改的文件 - 把暂存区的修改撤销掉:
git reset HEAD file
# file是要撤销修改的文件
*** 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考[版本回退]一节,不过前提是没有推送到远程库。*** - 删除文件:
rm test.txt
- 从版本库中删除该文件:用命令
git rm test.txt
删掉,并且git commit -m " ..."
- 把误删的文件恢复到最新版本:
git checkout -- test.txt
远程库操作
- 创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
- 添加远程库:
git remote add origin git@github.com:michaelliao/learngit.git
** #照抄github上的提示** - 推送到远程库:
git push -u origin master
*** 把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。此后,用git push origin master
推送修改*** - 克隆远程库:
git clone https://github.com/pipi636/work.git
orgit clone git@github.com:pipi636/work.git
分支
- 创建dev分支:
git branch dev
- 切换到dev分支:
git checkout dev
- 创建并合并到dev分支:
git checkout -b dev
- 查看当前分支:
git branch
- 把dev分支的工作成果合并到master分支上:
git merge dev
- 删除dev分支:
git branch -d dev
- 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。用
git log --graph
命令可以看到分支合并图。
未完待续
感谢廖雪峰老师的git教程,通俗易懂。