git 的 分支、编辑、提交、合并
第一步是用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
为什么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内容也删了:
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭