git日常使用操作 (快速入门)

title: git日常使用操作 (快速入门) 
date: 2015-11-12 10:41:34

Git简介(一)——Git的历史和特点

Git是一款开源的分布式版本控制系统(Distributed Version Control System) ,诞生于2002年,由Linux之父Linus Torvalds带领Linux开源社区开发完成。初衷是用其管理Linux内核的庞大的开源代码。

Git的设计理念包括以下几点:

  • 速度快
  • 设计简单
  • 强力支持非线性开发,允许上千分支并行开发
  • 完全的分布式
  • 有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)

Git简介(二)——分布式与集中式的区别

不同于大家所熟知的SVN,CC等集中式的版本控制工具,Git是一款分布式的版本控制工具。以下两幅图展示了两种工具不同的工作模式


Git简介(三)——对比数据


Git简介(四)——Git给我们带来了什么?

以下情况有遇到过吗?抓狂过,有木有?

  • * 突然插入的bugfix,回退工作目录。全删全编,漫长琐碎!* 
    * Git stash保存所有工作内容,一条命令帮你搞定!*
  • * 同时开发多个特性,你敢混用一个工程么?自找麻烦!* 
    * Git branch多条私有分支,简单轻松。拉分支无需审批,我的地盘我做主。 *
  • * 查看文件的svn log,等吧~~~ZZZzzz~~~~~ * 
    * Gitk 完全本地化运作,一眨眼的功夫。还有完全的分支图,爽不爽?*
  • * 完成了!提交!不对!加个补丁提交!以混乱示人,甘心么?* 
    * 提交错了怎么办,打个补丁?你out了,git amend帮你搞定,了无痕迹。*
  • * 最无脑debug,二分法回退版本。为什么不用呢?操作好烦!* 
    * 用的bisect,指定两端:good和bad,Git帮你找。*

心动了吗?让我们开始吧。

Git基础知识(二)——基本操作模式


Git基础知识(三)——Snapshot


Git基本日常操作 (重点)

  • * 克隆中心库到本地 * 
    * $ git clone 中心库名称地址 本地工作目录名称 *
$ git clone http://git.xxxx.net/xxxx/tools.git -b master mylocal_tools_path
  • * 增加文件提交入库*
$ echo "Hi," >> readme.txt
$ git add readme.txt
$ git commit -m "Just a test for add readme.txt"
  • * 修改文件提交入库 *
$ echo "wwwww ! " >> readme.txt
$ git add readme.txt
$ git commit -m "Just a test for modify  readme.txt"
  • * 删除文件提交入库 (直接使用rm filename 是没有用的,必须要用git rm 存入git缓存中)*
$ git rm readme.txt
$ git commit -m "Just a test for remove  readme.txt"


  • * Push提交到中心库中及创建删除中心库分支 * 

  • * Push提交到中心库 *
$ git push 
注:默认后面的参数都省略了,以你下载服务器的master分支为例,上面的命令等于:
$ git push origin HEAD:master
  • * Push 提交到其他分支 *
$ git push origin HEAD:other_dev_branch
  • * 创建中心库分支 *
$ git push origin HEAD:my_new_branch
  • * 删除中心库分支 *
$ git push origin :my_new_branch
  • * 强制覆盖中心库分支(不要轻易使用 - -!) *
$ git push origin HEAD:other_dev_branch -f
  • * 修复上一次提交的内容或提交信息 *
$ git add your_patch
$ git commit --amend
  • * 取消本地文件的修改,回复已删除掉的文件 *
$ git checkout 文件名
  • * 取消/回退已缓存的修改 *
$ git reset --hard HEAD 文件名
注:此操作将回退本地此文件到当前最新提交节点,包括本地内容
$ git reset HEAD 文件名
注:此操作将修改的文件从缓冲区内删除,此文件的修改还在本地环境中
  • * 清除本地所有已修改的文件和所有垃圾文件 *
$ git reset --hard HEAD;git clean -fd
注:前面是清除所有git修改包括git缓存中的及status绿色的,git clean -fd 是清除所有未进入git 库的垃圾文件目录
  • * 查看仓库状态 *
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")
注:查看本地库中所有文件的状态,包括未受控的,已修改,已缓存。冲突文件的状态也表现为已修改的。
  • * 比较文件差异 *
  • * 比较当前修改的所有文件与库里的差异* 
    * git diff 默认是对比本地目录的修改和git缓存中的自己去对比,缓存中没有修改那么默认就是和代码库里面作对比 * 
    * git diff –cached 是对比缓存的修改和git代码库中去对比 *
$ git diff  
diff --git a/readme.txt b/readme.txt
index 2b4b449..3633e9a 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
+Just a test
 Hi,wwwww!
  • * 比较某文件在俩次Commit提交之间的差异 *
$ git diff  OldcommitID NewcommitID 文件名
注:不加文件名及对比所有变动的文件
  • * 比较某文件TAG_1.0与TAG_2.0有哪些差异修改 *
$ git diff  TAG_1.0 TAG_2.0 文件名
注:不加文件名及对比所有变动的文件


  • * 查看log * 

  • * 普通查看 *
$ git log
commit dd49031a9eaf3f4ecfc89685b592db80d44a1639
Author: dongwuming <dongwuming@wwwww.com>
Date:   Wed Nov 11 16:58:19 2015 +0800

    Hi,wwwww !
注:git reflog 显示本地所有的提交历史log记录包含已删除回退的
  • * Log单行显示查看 *
$ git log --oneline
c254c21 Modify 使用说明.md for Update by gitlab HOOKS
dccf161 Update QA blog
2c7d1ae Merge branch 'master' of http://10.1.22.7/QA/QA_blog
7fd0018 Mac使用小常识
52764c8 Modify 使用说明
6cd53a5 Add hello-world.md
  • * 显示每个提交修改了哪些文件 *
$ git log --name-status
commit 6cd53a5a1a31e06ba6daa7f493af4ef68c1946f9
Author: dongwuming <dongwuming@wwwww.com>
Date:   Thu Nov 5 18:54:17 2015 +0800

    Add hello-world.md

A       source/_posts/hello-world.md
  • * 显示每个提交修改了哪些文件及内容 *
$ git log -p
commit dd49031a9eaf3f4ecfc89685b592db80d44a1639
Author: dongwuming <dongwuming@wwwww.com>
Date:   Wed Nov 11 16:58:19 2015 +0800

    Hi,wwwww !

diff --git a/readme.txt b/readme.txt
new file mode 100644
index 0000000..2b4b449
--- /dev/null
+++ b/readme.txt
@@ -0,0 +1 @@
+Hi,wwwww
 !
  • * 在log中每个提交后面显示对应的TAG名 branch名 *
$ git log --decorate
commit dd49031a9eaf3f4ecfc89685b592db80d44a1639 (HEAD, tag: TAG_2.0, master)
  • * 查看本地分支/查看当前库下的所有分支及本地和远端库的分支 *
$ git branch
* master
$ git branch -a
* master
  remotes/origin/master
  • * 新建本地分支 *
$ git branch 新建分知名 commitID/TAG/分支名 
$ git checkout -b 新建分知名 commitID/TAG/分支名 (建议都使用这种方便的方法创建)
  • * 删除本地分支 *
git branch -D 分知名
注:git branch -d 只可以删除与当前分支同源或Merged过的,所有尽量使用-D就可以啦
  • * 分支合并 *
$ git merge 分知名
注:此操作是将“分支名”指示的分支合并到当前所在的分支,所以合并前必须切换到目标分支。
  • * 解决冲突 (重要) *
  • 合并分支,或合并库上的更新到本地均会产生冲突。Git的冲突产生是由于同一文件的同一行内容不同,具体如下: 
    gitmergetestbranchgitpullAutomergingreadme.txtCONFLICT(content):Mergeconflictinreadme.txtAutomaticmergefailed;fixconflictsandthencommittheresult. git status 
    On branch master 
    You have unmerged paths. 
    (fix conflicts and run “git commit”)
Unmerged paths:
  (use "git add <file>..." to mark resolution)

    both modified:   readme.txt
$ vi readme.txt
<<<<<<< HEAD
Hi,World !
=======
Hello,wwwww!
>>>>>>> test_branch

注:<<<<<<< HEAD到========之间是当前分支的修改,=======到>>>>>>> test_branch是合入的test_branch分支上的修改
判断保留哪些内容后删除冲突标识 <<<<<<< HEAD 、======== 、>>>>>>> test_branch 后:
$ git add readme.txt
$ git commit 
  • * 暂存本地修改 *
存入暂存区:
$ git stash
取出:
$ git stash pop
  • * 变换基线base操作 *
$ git rebase 基线分支 换基分支
        A---B---C 换基分支
        /
    D---E---F---G    目标分支

                 A'--B'--C' 换基分支
                /
    D---E---F---G    基线分支


  • * 忽略规则 * 
    在git仓工作的根目录下面创建.gitignore文件,文件内容如下实例,同样.gitignore文件也可以上传的库上,这样每次下载都可以记录忽略规则,如果将某个已经忽略的文件添加,使用$ git add –f 文件名即可。 

*.so #忽略所有.so结尾的文件 
!lib.so #但lib.so 除外 
/TTT #忽略代码库根目录下TTT文件,不包括 test/TTT 
TEST/ #忽略TEST目录下的所有文件 
build/*.jar #忽略build目录下的所有文件,但是不包括build/lib/test.jar

  • * GUI图形化操作 * 
    添加、修改、删除文件时,可以直接通过“git gui”命令, 
    调出图形界面,通过“Stage Changed”缓存文件(新添加 
    的文件只能通过git add 命令缓存),在提交信息处输入“提 
    交信息”,然后通过“Commit”提交。


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值