git 分布式版本管理工具 常用命令(托管网站GitHub) 学习笔记

一、什么是版本控制

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

二、分布式版本控制

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

三、常见术语

           工作区(Working Directory)就是你的目录。

            版本库(Repository)工作区有一个隐藏目录.git,是Git的版本库。

           Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

四、git管理文件的状态

         git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

五、忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

六、常用命令

1、git init    在当前目录新建一个Git代码库

2、git init [project-name]    新建一个目录,将其初始化为Git代码库

3、git clone [url]   克隆一个项目和它的整个代码历史(版本信息)

4、git status [filename]   查看指定文件状态

5、git stattus   查看所有文件状态

       --文件的四种状态:

               1. Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

                2.Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

               3.Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

               4. Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

6、git add [file1] [file2] ...    添加指定文件到暂存区

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

8、 git add  .   添加当前目录的所有文件到暂存区

9、git rm --cached <file>  直接从暂存区删除文件,工作区则不做出改变  (文件从暂存区撤回工作区)

10、git reset HEAD <file>...     文件从暂存区撤回工作区(当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响)

11、git clean [options]   移除所有未跟踪文件      (一般会加上参数-df,-d表示包含目录,-f表示强制清除。)

12、git rm --cached readme.txt   只从stage中删除,保留物理文件

13、git rm readme.txt   不但从stage中删除,同时删除物理文件

14.git mv a.txt b.txt   把a.txt改名为b.txt

15、git commit   暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树

16、git reset HEAD       暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响

17、git checkout .  或  git checkout — <file>   会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

18、git checkout HEAD .     或      git checkout HEAD <file>     会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改 动

19、 git diff [files]    查看文件修改后的差异     (--a表示修改之前的文件,+++b表示修改后的文件)

20、git diff --cached   比较暂存区的文件与之前已经提交过的文件

21、git diff HEAD~n       比较repo与工作空间中的文件差异

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

23、git checkout   或   git checkout HEAD     汇总显示工作区、暂存区与HEAD的差异

24、git checkout -- filename   用暂存区中filename文件来覆盖工作区中的filename文件。相当于取消自上次执行git add filename以来(如果执行过)的本地修改

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

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

27、git checkout commit_id -- file_name      如果不加commit_id,那么git checkout -- file_name 表示恢复文件到本地版本库中最新的状态

28、git commit -m [message]      提交暂存区到仓库区

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

30、git commit -a      提交工作区自上次commit之后的变化,直接到仓库区,跳过了add,对新文件无效

31、git commit -v     提交时显示所有diff信息

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

33、git commit --amend [file1] [file2] ...    重做上一次commit,并包括指定文件的新变化

34、git commit --amend     如果我们提交过后发现有个文件改错了,或者只是想修改提交说明,这时可以对相应文件做出修改,将修改过的文件通过"git add"添加到暂存区,然后执行这个命令

35、 git reset --hard HEAD~1    撤销上一次的提交   (原理就是放弃工作区和index的改动,同时HEAD指针指向前一个commit对象)

36、git log  查看提交日志

37、git revert <commit-id>     撤销提交 , 这条命令会把指定的提交的所有修改回滚,并同时生成一个新的提交

38、git ls-files指令可以查看指定状态的文件列表

git分支中常用指令:

        截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

39、git branch  列出所有本地分支

40、git branch -r    列出所有远程分支

41、  git branch -a   列出所有本地分支和远程分支

42、 git branch [branch-name]    新建一个分支,但依然停留在当前分支

43、git checkout -b [branch]   新建一个分支,并切换到该分支

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

45、git branch --track [branch] [remote-branch]      新建一个分支,与指定的远程分支建立追踪关系

46、git checkout [branch-name]  切换到指定分支,并更新工作区

 47、git checkout -     切换到上一个分支

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

49、git merge [branch]      合并指定分支到当前分支

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

51、 git branch -d [branch-name]    删除分支 

52、git push origin --delete [branch-name]   或  git branch -dr [remote/branch]      删除远程分支

53、git config --globla    设置邮箱用户名  (基本不用,给这个计算机一次性设置)

54、git config --system    设置邮箱用户名  (推荐、给这个当前用户一次性设置)

55、git config --local  user.name 'name'  设置邮箱用户名  (给这个当前项目一次性设置)

 

git 与 github:

56、git remote add origin https://github.com/用户名/仓库名   (https方式) 

     git push -u origin master                  通过这种方式可以先GitHub推送项目文件,但是每次都要重新登录

57、git remote add origin git@github.com:用户名/仓库名  (ssh方式) 

     git push -u origin master                  通过这种方式可以先GitHub推送项目文件,但是每次都要配置秘钥,配置以后都可以与                                                                  GitHub免密码交互

                                                               后续推送只要:git push

58、ssh-keygen      在本地用户目录生成公钥和秘钥

                                可以将公钥存放在github的两个人地方:

                                        1、在项目的setting里配置,只有此项目可以与本地用户免秘钥登录

                                        2、在用户的setting里配置,此用户所有项目都可以与本地用户免秘钥登录

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值