Git操做清单

Git是分布式版本控制系统,那么它就没有中央服务器的,每一个人的电脑就是一个完整的版本库,这样,工做的时候就不须要联网(能够离线在本地提交,在联网时push到相应的服务器或其余用户)了,由于版本都是在本身的电脑上。既然每一个人的电脑都有一个完整的版本库,那多我的如何协做呢?好比说本身在电脑上改了文件A,其余人也在电脑上改了文件A,这时,大家两之间只需把各自的修改推送给对方,就能够互相看到对方的修改了。html

1.前期准备

  1. 安装git
  2. 配置git:
git config --global user.name "*********"
git config --global user.email "*********@gmail.com"
复制代码

2.操做

// Bash基本操做命令

cd 改变目录
cd ..  会退到上一级目录
mkdir  新建一个目录,一个文件夹
pwd  显示当前目录的路径
ls(-la)  列出当前文件的全部文件
touch  新建一个文件(touch index.js)
rm 删除一个文件
rm -r  删除一个文件夹
mv  移动文件(mv index.html src)
clear  清屏
history  查看历史的命令
help  帮助
exit  退出
复制代码
1.git工做流程

git工做流程

git工做流程

2.git平常使用基本命令
  • workspace: 工做区
  • index/stage: 暂存区
  • repository/history:本地仓库
  • remote repository:远程仓库

基本命令

1.建立版本库

什么是版本库?版本库又名仓库,英文名repository,你能够简单的理解一个目录,这个目录里面的全部文件均可以被Git管理起来,每一个文件的修改,删除,Git都能跟踪,以便任什么时候刻均可以追踪历史,或者在未来某个时刻还能够将文件”还原”。git

  1. 经过git init命令把当前目录变成git能够管理的repository。(全新的)
cd gitDemo   //切换目录gitDemo

git init   //初始化目录,目录下会多了一个.git的目录,
           //这个目录是Git来跟踪管理版本的
复制代码
  1. 克隆远程仓库(clone)
#克隆一个项目和他的整个历史版本
git clone [url]
复制代码
2.git文件操做
  1. 版本控制就是对文件的版本控制,要对文件进行修改、提交等操做,首先要知道文件当前在什么状态,否则可能会提交了如今还不想提交的文件,或者要提交的文件没提交上。文件共有4张状态:Untracked;Unmodify;Modified;Staged。
  • Untracked(未跟踪):此文件在文件夹中,但并无加入到git库,经过git add状态改变为Staged。
  • Unmodify(未修改):文件已经入库,版本库中的文件快照内容与文件夹中彻底一致。若是文件修改状态变成Modified,若是git rm移除,则状态变成Untracked。
  • Modified(已修改):文件仅仅已经修改,可是没有作其余的操做。若是文件git add则状态变成Staged;若是git checkout(从库中取出文件覆盖当前修改)丢弃修改,则变成Unmodify。
  • Staged(暂存):若是执行git commit,将文件提交到本地库中,这是库中的文件和本地文件一致,文件状态变为Unmodify;若是执行git reset HEAD filename取消暂存,文件状态变为Modifed。
  • 文件状态
  1. 查看文件状态
#查看指定文件状态
git status [filename]

#查看全部文件状态
git status
复制代码
  1. 添加文件与目录 Git的版本库里存了不少东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为咱们自动建立的第一个分支master,以及指向master的一个指针叫HEAD。
#添加指定文件到暂存区
git add [filename1][filename2]……

#添加指定目录到暂存区,包括子目录
git add [dir]

#添加当前目录全部的文件到暂存区
git add .
复制代码
  1. 移除文件与目录(撤销add)
    移除文件与目录
#直接从暂存区移除文件
git rm --cached [file]   //工做区不做出改变
git rm [file]  //不但从暂存区中删除,同时删除物理文件

#若是已经经过add命令加入stage,就须要从stage中撤销,工做区不受影响。
git reset HEAD [file]

#移除全部未跟踪文件
#通常会加上-df,-d表示包含目录,-f表示强制清除
git clean [options]
复制代码
  1. 查看文件修改后的差别:git status能看到那些文件作出了修改,可是看不见具体的内容,则是使用git diff。
#查看文件修改后的差别
git diff [files]

#比较暂存区的文件和以前提交的文件
git diff --cached

#比较repo与工做空间中的文件差别
git diff HEAD
复制代码

查看修改
6. 签出:若是仓库中已经存在文件f4.txt,在工做区中对f4修改了,若是想撤销可使用checkout,签出覆盖检出命令git checkout是git最经常使用的命令之一,同时也是一个很危险的命令,由于这条命令会重写工做区。

$ git checkout branch
#检出branch分支。要完成图中的三个步骤,更新HEAD以指向branch分支,以及用branch 指向的树更新暂存区和工做区。

$ git checkout
#汇总显示工做区、暂存区与HEAD的差别。

$ git checkout HEAD
#同上

$ git checkout -- filename
#用暂存区中filename文件来覆盖工做区中的filename文件。至关于取消自上次执行git add filename以来(若是执行过)的本地修改。

$ git checkout branch -- filename
#维持HEAD的指向不变。用branch所指向的提交中filename替换暂存区和工做区中相 应的文件。注意会将暂存区和工做区中的filename文件直接覆盖。

$ git checkout -- . 或写做 git checkout .
#注意git checkout 命令后的参数为一个点(“.”)。这条命令最危险!会取消全部本地的 #修改(相对于暂存区)。至关于用暂存区的全部文件直接覆盖本地文件,不给用户任何确认的机会!

$ git checkout commit_id -- file_name
#若是不加commit_id,那么git checkout -- file_name 表示恢复文件到本地版本库中最新的状态。
复制代码
  1. 提交:经过add只是将文件或目录添加到了index暂存区,使用commit能够实现将暂存区的文件提交到本地仓库。
# 提交暂存区到仓库区
$ git commit -m [message]

# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]

# 提交工做区自上次commit以后的变化,直接到仓库区,跳过了add,对新文件无效
$ git commit -a

# 提交时显示全部diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 若是代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]

# 重作上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
复制代码
  1. 总结
    总结

3.分支

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另外一个你正在另外一个平行宇宙里努力学习SVN。安全

若是两个平行宇宙互不干扰,那对如今的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!bash

分支

1.经常使用命令
#列出全部的分支
git branch

#列出全部的远程分支
git branch -r

#列出全部远程分支和本地分支
git branch -a

#新建一个分支,并依旧停留在当前分支
git branch [branchName]

#新建一个分支,并切换到该分支
git checkout -b [branchName]

#切换分支,并更新工做区
git chechout [branchName]

#切换到上一个分支
git checkout -

#合并指定分支到当前分支
git merge [branchName]

#选择一个commit,并合并进当前分支
git cherry-pick [commit]

#删除分支
git branch -d [branchName]

#删除远程分支
git push origin --delete [branchName]
git branch -dr [remote/branch]

# 创建追踪关系,在现有分支与指定的远程分支之间
git branch --set-upstream [branch] [remote-branch]

# 新建一个分支,指向指定commit
git branch [branch] [commit]

# 新建一个分支,与指定的远程分支创建追踪关系
git branch --track [branch] [remote-branch]
复制代码
2.冲突解决

若是同一个文件在合并分支时都被修改了则会引发冲突。解决的办法是==咱们能够修改冲突文件后从新提交==,请注意当前的状态产master | MERGING。服务器

新建一个分支demo并切换到当前分支,而后修改文件index.js文件,并add,commit;而后切换到主分支master,并修改文件index.js,也add,commit。分布式

1. 合并分支
git merge demo

2.发生冲突
CONFLICT (content): Merge conflict in index.js

3.查看冲突的文件
git status

4.手动修改文件后并提交
git add index.js

5.删除demo分支
git branch -d demo
复制代码
3.拉取提交代码
  1. 若是是提交的话,直接git push
  2. 若是是拉取的话,就有两种状况:pull、fetch
git  pull     从远程拉取最新版本 到本地  自动合并 merge            git pull origin master

git  fetch   从远程获取最新版本 到本地   不会自动合并 merge    git fetch  origin master       git log  -p master ../origin/master    
git merge orgin/master

实际使用中  使用git fetch 更安全    在merge以前能够看清楚 更新状况  再决定是否合并
复制代码
相关文章
相关标签/搜索