Git一些常用方式

git简介

Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git有什么特点?简单来说就是:高端大气上档次
Linus在1991年创建了开源的Linux,然后创建git

git安装

查看:git
Debian或Ubuntu Linux,通过一条sudo apt-get install git
ebian或Ubuntu Linux: sudo apt-get install git-core,因为以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuit,git-core正式改为git。

果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。

Mac OS X上安装Git

一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。

第二种方法更简单,也是推荐的方法,就是直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

image

在Windows上安装Git

在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!


image

安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

创建版本库

创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

第二步,通过git init命令把这个目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

把文件添加到版本库

编写一个readme.txt文件

Git is a version control system.
Git is free software.

第一步,用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

查看结果:git status
查看修改内容 git diff

版本回退

查看历史 git log 出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

回退命令:git reset git reset --hard HEAD^
查看文本内容 cat readme.txt
git reset --hard 3628164 回退到具体版本

查看 命令历史 git reflog

连续修改

第一次修改 -> git add -> 第二次修改 -> git add -> git commit

撤销修改

git checkout -- file

git reset HEAD file可以把暂存区的修改撤销掉(unstage)

删除

一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
git checkout -- test.txt

远程仓管

1 本地创建, 关联现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:

git remote add origin [email protected]:michaelliao/learngit.git
git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

用git push命令,实际上是把当前分支master推送到远程。

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

git push origin master

2 远程克隆
命令行进入一个文件夹

git clone [email protected]:michaelliao/gitskills.git

分支管理

首先,我们创建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 branch命令查看当前分支:

$ git branch
* dev
  master

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

$ git merge dev
Updating d17efd8..fec145a
Fast-forward
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

删除dev分支了:

$ git branch -d dev
Deleted branch dev (was fec145a).

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch 

切换分支:git checkout 

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

合并某分支到当前分支:git merge 

删除分支:git branch -d 

冲突

参数的git log也可以看到分支的合并情况:

$ git log --graph --pretty=oneline --abbrev-commit
*   59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...

分支管理策略

Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息
备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

bug分支

stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看:

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

接着回到dev分支干活了!
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

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

查看远程库 git remote:git remote -v显示更详细的信息:

你可能感兴趣的:(Git一些常用方式)