这篇文章上次修改于 1959 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

2019-06-25_130552.png

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git
commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git
commit就可以一次性把暂存区的所有修改提交到分支。

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

git init命令把这个目录变成Git可以管理的仓库:

git add告诉Git,把文件添加到仓库:

git commit -m 告诉Git,把文件提交到仓库:

git status命令可以让我们时刻掌握仓库当前的状态

git diff 顾名思义就是查看difference

git log命令显示从最近到最远的提交日志

果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数

我们要把当前版本回退到上一个版本,就可以使用git reset命令:

$ git reset --hard HEAD^
$ git reset --hard 1094a  //commit id

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

┌────┐
│HEAD│
└────┘

└──> ○ append GPL

    │
    ○ add distributed
    │
    ○ wrote a readme file

改为指向add distributed:

┌────┐
│HEAD│
└────┘

│ ○ append GPL
│ │
└──> ○ add distributed

    │
    ○ wrote a readme file

在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

git reflog查看命令历史,以便确定要回到未来的哪个版本。

ssh

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

远程仓库

 git remote add origin git@github.com:michaelliao/learngit.git

删除远程仓库git remote rm origin

 git remote rm origin

此时,我们再查看远程库信息:

 git remote -v

关联GitHub的远程库:

git remote add 

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

从远程库克隆

用命令git clone克隆一个本地库

分支管理

首先,我们创建dev分支,然后切换到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

远程分支管理

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

然后,用git branch命令查看当前分支:

$ git branch

  • dev
    master

合并

我们把dev分支的工作成果合并到master分支上:

$ git merge dev

git merge命令用于合并指定分支到当前分支。

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

删除远程分支

git push origin --delete dev

解决冲突

   git diff

2019-06-25_132211.png

为什么Git的提交历史不能是一条干净的直线?

Git有一种称为rebase的操作,有人把它翻译成“变基”。

命令git rebase

rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,

git stash list:

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了: