git_基本使用

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/

转载于:https://www.cnblogs.com/tongbiao/p/7764309.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值