1.默认你已经安装了,git的客户端,这里我们使用git bash操作。

2.执行git init命令:      git ini

3.在本地创建ssh key:  ssh-keygen -t rsa -C "wuyan@qql.com"

4.不设置 任何秘密 回车下一步 生成key

4.1设置username和email

  git config --global user.name "takhello0"
  git config --global user.email "wuyan@qq.com"

5.进入提示的地址下查看ssh key文件

6.查看key

7.登陆git 设置ssh keys

8.测试是否可以成功链接: ssh -T git@github.com  如果出现 You’ve successfully authenticated, but GitHub does not provide shell access 成功连上github。

9.在git上建立仓库   不要添加文件

10.

-git add  -A.               # 添加所有文件到本地索引,命令用法:git add <file>

-git commit -m "My first commit operation"   # 提交修改到本地仓库,-m选项添加提交注释

-git remote add origin git@github.com:yourName/gitHub的仓库地址.git    # 添加远程仓库地址,保存在origin变量中

推送到远程共享库中 -git push origin master      # 按照前一条命令中origin给定的github地址推送到github仓库的master分支

          git push -u origin master

Git fetch origin master  获取远程仓库

git pull           切换目录(新用户),获取最新的文件:

git status          查看git仓库中各文件的当前状态

11.交互流程

12.目录简单说明

  

  1. hooks:这个目录存放一些shell脚本,可以设置特定的git命令后触发相应的脚本;在搭建gitweb系统或其他git托管系统会经常用到hook script
  2. info:包含仓库的一些信息
  3. objects:所有的Git对象都会存放在这个目录中,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
  4. refs:这个目录一般包括三个子文件夹,heads、remotes和tags,heads中的文件标识了项目中的各个分支指向的当前commit
  5. config:这个是GIt仓库的配置文件
  6. description:仓库的描述信息,主要给gitweb等git托管系统使用
  7. HEAD:这个文件包含了一个档期分支(branch)的引用,通过这个文件Git可以得到下一次commit的parent

13.代码clone

  git clone <仓库地址或目录> /d/software/respository/<仓库名> <用户目录>

  注意的是第一次需要使用clone命令将整个项目down到本地(类似svn的check),不是首次的话就可以直接使用git pull来同步更新代码了

1.在本地仓库里右键 Git Init Here
2.git init
3.在本地创建ssh key
ssh-keygen -t rsa -C "wuyan@qq.com"

4.设置username和email
git config --global user.name "takhello0"
git config --global user.email "wuyan@qq.com"

4.0
 git remote add origin git@github.com:yourName/gitHub的仓库地址.git

4.1在gitHub上建立仓库 不要添加文件

5.

git add 文件名

git add -A

6.git commit -m "备注"

7.git remote add origin 你提交的地址

8.git push -u origin master

获取远程仓库

Git fetch origin master

补充收集 一:git提交忽略文件或文件夹

在项目根目录下面 添加 .gitignore文件

文件中每一行表示需要忽略的文件的正则表达式.

.gitignore文件过滤有两种模式,开放模式和保守模式

1. 开放模式负责设置过滤哪些文件和文件夹

例如: /target/ 表示项目根目录下的target文件夹里面所有的内容都会被过滤,不被GIT 跟踪

.classpath 表示项目根目录下的.classpath文件会被过滤,不被GIT跟踪

2. 保守模式负责设置哪些文件不被过滤,也就是哪些文件要被跟踪。

例如:

!/target/*.h 表示target文件夹目录下所有的.h文件将被跟踪

另外别忘记了在.gitignore文件中加入一行.gitignore,否则的话.gitignore将会被传到GIT服务器上

规则写法

1. 在已忽略文件夹中不忽略指定文件夹

/node_modules/*

!/node_modules/layer/

2. 在已忽略文件夹中不忽略指定文件

/node_modules/*

!/node_modules/layer/layer.js

【注意项】注意写法 要忽略的文件夹一定要结尾 /* ,否则不忽略规则将无法生效

3. 其他规则写法 (附)

  以斜杠“/”开头表示目录;
  以星号“*”通配多个字符;
  以问号“?”通配单个字符
  以方括号“[]”包含单个字符的匹配列表;
  以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

1、忽略文件

*.bak               # 忽略所有扩展名为.bak的文件

!keep.bak      # 但keep.bak文件除外(不会被忽略)

temp/test.txt  # 忽略temp目录下的test.txt文件

temp/*.txt       # 忽略temp目录下所有扩展名为.txt的文件

2、忽略目录

temp/       # 忽略temp目录下的所有目录和文件

temp/*/    # 忽略temp目录下的所有目录,但不会忽略该目录下的文件

补充收集 二: 错误处理

如果输入$ git remote add origin git@github.com:djqiang(github帐号名)/gitdemo(项目名).git

提示出错信息:fatal: remote origin already exists.

解决办法如下:

1、先输入$ git remote rm origin

2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git 就不会报错了!

3、如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section 'remote.origin'. 我们需要修改gitconfig文件的内容

4、找到你的github的安装路径,我的是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8\etc

5、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行删掉就好了!

如果输入$ ssh -T git@github.com
    出现错误提示:Permission denied (publickey).因为新生成的key不能加入ssh就会导致连接不上github。

解决办法如下:

1、先输入$ ssh-agent,再输入$ ssh-add ~/.ssh/id_key,这样就可以了。

2、如果还是不行的话,输入ssh-add ~/.ssh/id_key 命令后出现报错Could not open a connection to your authentication agent.解决方法是key用Git Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行来做。

3、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。

如果输入$ git push origin master

提示出错信息:error:failed to push som refs to .......

解决办法如下:

1、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来

2、再输入$ git push origin master

3、如果出现报错 fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal: Could not read from remote repository.

4、则需要重新输入$ git remote add origingit@github.com:djqiang/gitdemo.git

使用git在本地创建一个项目的过程

$ makdir ~/hello-world    //创建一个项目hello-world
    $ cd ~/hello-world       //打开这个项目
    $ git init             //初始化 
    $ touch README
    $ git add README        //更新README文件
    $ git commit -m 'first commit'     //提交更新,并注释信息“first commit”
    $ git remote add origin git@github.com:defnngj/hello-world.git     //连接远程github项目  
    $ git push -u origin master     //将本地项目更新到github项目上去

gitconfig配置文件

Git有一个工具被称为git config,它允许你获得和设置配置变量;这些变量可以控制Git的外观和操作的各个方面。这些变量可以被存储在三个不同的位置: 
         1./etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。 
         2.~/.gitconfig 文件 :具体到你的用户。你可以通过传递--global 选项使Git 读或写这个特定的文件。
         3.位于git目录的config文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config中的值覆盖了在/etc/gitconfig中的同一个值。
        在Windows系统中,Git在$HOME目录中查找.gitconfig文件(对大多数人来说,位于C:\Documents and Settings\$USER下)。它也会查找/etc/gitconfig,尽管它是相对于Msys 根目录的。这可能是你在Windows中运行安装程序时决定安装Git的任何地方。

配置相关信息:

2.1 当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

  $ git config --global user.name "John Doe"

  $ git config --global user.email johndoe@example.com

2.2    你的编辑器(Your Editor)

  现在,你的标识已经设置,你可以配置你的缺省文本编辑器,Git在需要你输入一些消息时会使用该文本编辑器。缺省情况下,Git使用你的系统的缺省编辑器,这通常可能是vi 或者 vim。如果你想使用一个不同的文本编辑器,例如Emacs,你可以做如下操作:

  $ git config --global core.editor emacs

2.3 检查你的设置(Checking Your Settings)

  如果你想检查你的设置,你可以使用 git config --list 命令来列出Git可以在该处找到的所有的设置:

  $ git config --list

你也可以查看Git认为的一个特定的关键字目前的值,使用如下命令 git config {key}:

  $ git config user.name

2.4 获取帮助(Getting help)

  如果当你在使用Git时需要帮助,有三种方法可以获得任何git命令的手册页(manpage)帮助信息:

  $ git help <verb>

  $ git <verb> --help

  $ man git-<verb>

  例如,你可以运行如下命令获取对config命令的手册页帮助:

  $ git help config

Git命令

服务器端(remote)的情况:

git的服务器端(remote)端包含多个repository,每个repository可以理解为一个项目。而每个repository下有多个branch,此处各个branch的意义,可以参考这篇文章。"origin"就是指向某一个repository的指针。服务器端的"master"(强调服务器端是因为本地端也有master)就是指向某个repository的一个branch的指针。

这是服务器端(remote)的情况:

本地电脑(local)上:"master"就是指向刚刚从remote server传到本地的副本branch。

查看、添加、提交、删除、找回,重置修改文件

1.新建代码库

# 在当前目录新建一个Git代码库
$ git init # 新建一个目录,将其初始化为Git代码库
$ git init [project-name] # 下载一个项目和它的整个代码历史
$ git clone [url]

2.配置

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

# 显示当前的Git配置
$ git config --list # 编辑Git配置文件
$ git config -e [--global] # 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

3.增删文件

# 添加指定文件到暂存区
$ git add [file1] [file2] ... # 添加指定目录到暂存区,包括子目录
$ git add [dir] # 添加当前目录的所有文件到暂存区
$ git add . # 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p # 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ... # 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file] # 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

4.提交文件

# 提交暂存区到仓库区
$ git commit -m [message] # 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message] # 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a # 提交时显示所有diff信息
$ git commit -v # 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message] # 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...

9.撤销操作

# 恢复暂存区的指定文件到工作区
$ git checkout [file] # 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file] # 恢复暂存区的所有文件到工作区
$ git checkout . # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file] # 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit] # 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit] # 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit] # 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop

5.分支处理

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r # 列出所有本地分支和远程分支
$ git branch -a # 新建一个分支,但依然停留在当前分支
$ git branch [branch-name] # 新建一个分支,并切换到该分支
$ git checkout -b [branch] # 新建一个分支,指向指定commit
$ git branch [branch] [commit] # 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch] # 切换到指定分支,并更新工作区
$ git checkout [branch-name] # 切换到上一个分支
$ git checkout - # 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch] # 合并指定分支到当前分支
$ git merge [branch] # 选择一个commit,合并进当前分支
$ git cherry-pick [commit] # 删除分支
$ git branch -d [branch-name] # 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

6.标签

# 列出所有tag
$ git tag # 新建一个tag在当前commit
$ git tag [tag] # 新建一个tag在指定commit
$ git tag [tag] [commit] # 删除本地tag
$ git tag -d [tag] # 删除远程tag
$ git push origin :refs/tags/[tagName] # 查看tag信息
$ git show [tag] # 提交指定tag
$ git push [remote] [tag] # 提交所有tag
$ git push [remote] --tags # 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

7.查看信息

# 显示有变更的文件
$ git status # 显示当前分支的版本历史
$ git log

# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat # 搜索提交历史,根据关键词
$ git log -S [keyword] # 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s # 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature # 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file] # 显示指定文件相关的每一次diff
$ git log -p [file] # 显示过去5次提交
$ git log -5 --pretty --oneline # 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn # 显示指定文件是什么人在什么时间修改过
$ git blame [file] # 显示暂存区和工作区的代码差异
$ git diff # 显示暂存区和上一个commit的差异
$ git diff --cached [file] # 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD # 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch] # 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}" # 显示某次提交的元数据和内容变化
$ git show [commit] # 显示某次提交发生变化的文件
$ git show --name-only [commit] # 显示某次提交时,某个文件的内容
$ git show [commit]:[filename] # 显示当前分支的最近几次提交
$ git reflog # 从本地master拉取代码更新当前分支:branch 一般为master
$ git rebase [branch]

8.远程同步

# 下载远程仓库的所有变动
$ git fetch [remote] # 显示所有远程仓库
$ git remote -v # 显示某个远程仓库的信息
$ git remote show [remote] # 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url] # 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch] # 上传本地指定分支到远程仓库
$ git push [remote] [branch] # 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force # 推送所有分支到远程仓库
$ git push [remote] --all

10.其他

# 生成一个可供发布的压缩包
$ git archive

11.分支对比

  git log dev ^master   查看 dev 有,而 master 中没有的

  git log master ^dev   master 中有,而 dev 中没有的内容

异常记录:

1.问题1 add时出现警告

解决方案

git config --global core.autocrlf false

原因:

原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题

2.错误2

2、npm run -s precommit (node v8.9.3)

huideMacBook-Pro:graph huiyu$ git commit -m “更新代码”

husky > npm run -s precommit (node v8.9.3)

fatal: Not a git repository: ‘.git’

husky > pre-commit hook failed (add –no-verify to bypass)

解决: 
git commit -m “更新代码” -n

181115 新增

需求:在本地建立分支

1.git init 初始化

2.git add. 暂存

3.git commit -m 'first' 提交

4.git branch testVersions 新建分支 ‘testVersions’

5.git branch -a 查看所有分支

6.git checkout testVersions 切换到分支‘testVersions’

7.git checkout -b dev1 新建分支dev1 并切换到dev1

需求:对未修改完成的分支进行保存

  1.git stash   /   git stash save “修改的信息"    可以隐藏调未完成的修改

  2.git stash list   查看未修改完成的保存

  3. git stash apply     /     git stash apply stash@{0}  取出未修改完的保存

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
           git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
           git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
           git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

  补充:

切回原来分支 使用 git cherry-pick [commit id] 的方式,将另一分支的提交转到当前分支提交。

    

需求:控制版本

1. 建立多个分支

feature分支 (开发使用)

release分支 (测试中出现的bug修改)

hotfixes分支 (master中出现的bug修改)

盗图(~~)

指南:https://git-scm.com/book/zh/v1/

git_基本使用的更多相关文章

  1. Git_学习_07_ 推送修改到远端

    一.操作流程 多人协作时,若自己的本地代码有了修改,想提交自己的代码,就需要按照以下步骤操作: 1.确认修改正确 使用以下命令,查看有哪些是自己未提交的代码 git status 2.拉取远程最新代码 ...

  2. git_自动同步_sync.sh

    1: 使用方法  sh sync.sh  code_dir 代码 #add echo $1 cd $1 git add . git commit -m "Added notes for $( ...

  3. Git_学习_03_ ignore文件配置

    一.示例 # 1.Compiled class file *.class bin target # 2.Log file *.log logs # 3. Package Files # *.war * ...

  4. GIT_服务器与本地环境构建

    linux安装git包 很多yum源上自动安装的git版本为1.7,这里手动编译重新安装1:安装依赖包yum install curl-devel expat-devel gettext-devel ...

  5. git_如何查看两个版本之间那些文件被修改

    需求 由于工程比较庞大,接近500M,每部署一次如果都全量部署,不仅仅磁盘空间耗费较大,最主要是要等很长时间, 之前就一直有这个问题,但是也就没有弄,上周领导发话了,这个问题必须要解决了 前记 增加带 ...

  6. Git_期末总结

    终于到了期末总结的时刻了! 经过几天的学习,相信你对Git已经初步掌握.一开始,可能觉得Git上手比较困难,尤其是已经熟悉SVN的童鞋,没关系,多操练几次,就会越用越顺手. Git虽然极其强大,命令繁 ...

  7. Git_搭建Git服务器

    在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想 ...

  8. Git_配置别名

    有没有经常敲错命令?比如git status?status这个单词真心不好记. 如果敲git st就表示git status那就简单多了,当然这种偷懒的办法我们是极力赞成的. 我们只需要敲一行命令,告 ...

  9. Git_忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示“Untracked files ...”,有强迫症的童鞋心里 ...

  10. Git_自定义Git

    在安装Git一节中,我们已经配置了user.name和user.email,实际上,Git还有很多可配置项. 比如,让Git显示颜色,会让命令输出看起来更醒目: $ git config --glob ...

随机推荐

  1. POSIX线程接口编程学习心得

    由于实验需要,需要了解下C语言多线程编程的知识,于是学习了下POSIX线程编程的知识,有点心得,记录并分享一下. POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段.与标准 fork( ...

  2. Java Web编程的主要组件技术——Hibernate核心组件

    参考书籍:<J2EE开源编程精要15讲> Hibernate配置文件 1) hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8 ...

  3. BOM之JavaScript常用事件

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  4. Win7安装netbeans 找不到JDK

    安装netbeans,直接运行官方下载的.exe安装包,提示找不到jdk,我jdk已安装1.7,环境变量已配好.然后百度,找到很多都是linux下的解决方案,win7的很少,然后看到说--javaho ...

  5. Winform开发之SqlCommand常用属性和方法

    SqlCommand类表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程,有若干个属性和若干个方法,具体的各类方法使用可以从msdn上找到. 这里介绍几个常用东 ...

  6. I.MX6 Manufacturing Tool V2 (MFGTool2) Update Command List (UCL) User Guide translate

    Manufacturing Tool V2 (MFGTool2) Update Command List (UCL) User Guide Contents(目录) Contents(目录)     ...

  7. linux vi常用操作

    1.基本操作 进入vi vi 或者 vim 进入一个文件或者新建一个文件 例如:vim 11.txt vi有3种模式 一般模式:刚进入时.按esc时. 编辑模式:按下字母[i, I, o, O, a, ...

  8. Python ---- list和dict遍历

    refer to: http://www.cnblogs.com/icejoywoo/p/3531869.html 对于python3, 可能有不一样之处,   refer to: http://do ...

  9. NET怎么精确计算一个对象占用的内存空间(GMK)

    NET如何精确计算一个对象占用的内存空间(GMK)如题 我最近做了一个类似Session的东西 但是我不知道最后管理起来他又多大 所以内存 对象 管理 session 类 分享到: ------解决方 ...

  10. Web开发需要常见的问题

    1.sendRedirec()方法执行后,是会直接跳转到目标页面还是执行完其后的语句再跳转到目标页面??? 该方法在执行完其后面的语句才会跳转到目标页面,比如: public void doGet(H ...