zoukankan      html  css  js  c++  java
  • Git 命令

    参考文章:
    Git 常用命令详解(二)

    .gitignore 文件

    作用: 忽略某些文件或文件夹
    在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如

    target
    bin
    *.db
    

    工作区和暂存区的概念

    git add 实际上是把文件修改添加到暂存区

    git commit 实际上是把暂存区的东西添加到当前分支

    可用git status 查看当前分支状态

    git基础命令

    git rm:从当前的工作空间中和索引中删除文件,例如'git rm app/model/user.rb'
    git commit:提交当前工作空间的修改内容,例如'git commit -m story #3, add user model',提交的时候必须用-m来输入一条提交信息
    git log:查看历史日志
    git revert:还原一个版本的修改,必须提供一个具体的Git版本号,例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',Git的版本号都是生成的一个哈希值
    git reset:将当前的工作目录完全回滚到指定的版本号
    git stash:将当前未提交的工作存入Git工作栈中,时机成熟的时候再应用回来,这里暂时提一下这个命令的用法,后面在技巧篇会重点讲解
    git config:利用这个命令可以新增、更改Git的各种设置

    .git文件夹

    在代码根目录下有一个.git文件夹,有几个比较重要的文件和目录需要解释一下:
    HEAD文件存放根节点的信息,其实目录结构就表示一个树型结构,Git采用这种树形结构来存储版本信息,那么HEAD就表示根;

    refs目录存储了你在当前版本控制目录下的各种不同引用(引用指的是你本地和远程所用到的各个树分支的信息),它有heads、remotes、stash、tags四个子目录,分别存储对不同的根、远程版本库、Git栈和标签的四种引用,你可以通过命令'git show-ref'更清晰地查看引用信息;

    logs目录根据不同的引用存储了日志信息。

    git clone

    1)git clone:这是一种较为简单的初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一份

    例如:git clone git://github.com/someone/some_project.git some_project

    上面的命令就是将'git://github.com/someone/some_project.git'这个URL地址的远程版本库,完全克隆到本地some_project目录下

    如果你使用git clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库(git remote -v)并默认以 “origin” 为简写。

    git init 初始化

    2)git initgit remote:这种方式稍微复杂一些,当你本地创建了一个工作目录,你可以进入这个目录,使用git init命令进行初始化;Git以后就会对该目录下的文件进行版本控制,这时候如果你需要将它放到远程服务器上,可以在远程服务器上创建一个目录,并把可访问的URL记录下来,此时你就可以利用git remote add命令来增加一个远程服务器端,

    例如:git remote add origin git://github.com/someone/another_project.git

    上面的命令就会增加URL地址为'git: //github.com/someone/another_project.git',名称为origin的远程服务器,以后提交代码的时候只需要使用 origin别名即可

    1. 修改origin
      git remote set-url [name] [new_Url]

    4)查看远程仓库
    git remote -v

    git branch 分支

    本地分支

    查看本地分支:$ git branch
    查看远程分支:$ git branch -r
    创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支

    创建新分支并立即切换到新分支:$ git checkout -b [name]

    删除分支:$ git branch -d [name]
    -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

    合并分支:$ git merge [name]
    将名称为[name]的分支与当前分支合并

    远程分支

    查看远程分支:$ git branch -r
    创建远程分支(本地分支push到远程):$ git push origin [name]
    删除远程分支:$ git push origin :heads/[name]$ gitpush origin :[name]

    • 创建空的分支:(执行命令之前记得先提交你当前分支的修改,否则会被强制删干净没得后悔)
    $git symbolic-ref HEAD refs/heads/[name]
    $rm .git/index
    $git clean -fdx
    

    git checkout

    切换分支:$ git checkout [name]
    checkout:Git的checkout有两个作用,其一是在不同的branch之间进行切换,另一个功能是还原代码的作用,例如git checkout app/model/user.rb就会将user.rb文件从上一个已提交的版本中更新回来,未提交的内容全部会回滚

    git checkout -- readme.txt

    命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

    • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

    • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commit或git add时的状态。

    git stash 暂存工作现场

    工作进行到一半,还不想提交.可以用git stash把工作现场存储起来(没有git addgit commit) ------假设该分支为 wechat

    储存起来后,使用 git status 查看当前分支状态,此时是干净的工作区

    如果此时需要在master分支上修复BUG,切换到master分支, 再创建新分支进行BUG修改; 完全不会影响到wechat分支的代码.

    在新分支修改完BUG后, 合并到master分支push到远端代码版本后,可以切换回wechat分支继续之前的工作.

    使用 git stash list 查看刚刚暂存的工作,我们需要恢复工作区. 执行 git stash apply 命令恢复工作区,恢复后可自行删除暂存 git stash drop

    当然有一个更简便的方法恢复工作区并删除stash暂存: git stash pop

    如果stash有多个暂存时,我们可以指定恢复(git stash apply stash@{0} ) 或 指定删除(git stash drop stash@{0} ) 某个stash.

    在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit id>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

    git log :查看提交日志

      git log --pretty=oneline 查看提交日志(只打印commit id和描述)

    git status : 仓库当前的状态

    $ 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 status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

    $ git status
    
    On branch master
    
    Changes to be committed:
    
      (use "git reset HEAD <file>..." to unstage)
    
     
    
    modified:   readme.txt
    

    git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了

    $ git status
    
    On branch master
    
    nothing to commit, working tree clean
    

    Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的

    一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的

    可以用git log查看提交日志


    git diff: 查看difference

      git diff HEAD -- readme.tx 可以查看工作区和版本库里面最新版本的区别

    
    $ git diff readme.txt 
    
    diff --git a/readme.txt b/readme.txt
    
    index 46d49bf..9247db6 100644
    
    --- a/readme.txt
    
    +++ b/readme.txt
    
    @@ -1,2 +1,2 @@
    
    -Git is a version control system.
    
    +Git is a distributed version control system.
    
     Git is free software.
    

    git rebase 解决冲突

    1.拉取远程代码 到 master

    2.新建本地分支 local

    3.在本地分支提交代码 commit

    4.切换到本地 master分支, 重新拉取远程代码, 发现此时已经有其他人 提交了代码

    5.切换到 local 分支, 执行 git rebase master

    情况1: 没有冲突, 切换到master 分支 执行 git merge local, 并提交 git push

    情况2: 有冲突, 先手动解决冲突; 解决冲突后, git add 一下, git rebase --continue, 如果没有冲突了, 可以执行合并分支并推送到远程

    git rm 删除文件/文件夹

    git rm -r --cached target 删除远程仓库 target文件夹,删除后提交即可

    git rm target 删除本地 target文件夹,删除后提交即可

    git reset & git reflog(回退版本/撤销暂存区修改 & 查看命令日志)

    在Git中,用HEAD表示当前版本

    git reflog: 用来记录你的每一次命令,以便确定回退未来的commit id

    git reset --hard commit_id

    git reset --hard HEAD^ 回退到上一个版本

    git reset --hard HEAD~100 回退到往上100个版本

    git reset HEAD <file> 把暂存区的修改撤销掉(unstage),重新放回工作区

    远程主机名一般为origin,或者 为其他

    git fetch

    git fetch [远程主机名] [BranchName]:[LocalBranchName] 相当于是从远程获取master(BranchName)最新版本到本地分支,不会自动merge

    如: git fetch //创建并更新本地远程分支
    git fetch orgin //手动制定了远程主机,不指定分支时默认为master分支
      git fetch orgin master //从远程获取master分支最新版本到本地分支
      git fetch orgin master:temp //从远程获取master分支最新版本到本地temp分支

    git log -p master ..origin/master //比较本地的master分支和origin/master分支的差别
    git merge origin/master //进行合并远程仓库的master到本地

    git pull

    git pull [remoteName] [localBranchName] 等于是从远程获取最新版本并merge到本地分支

    git pull origin master //相当于git fetch 和 git merge

    git push

    推送远程仓库:$ git push [remoteName] [localBranchName]
    $git push origin test:master // 提交本地test分支作为远程的master分支
    $git push origin test:test // 提交本地test分支作为远程的test分支

  • 相关阅读:
    mysql之触发器before和after的区别
    字段与属性的区别
    功能性和非功能性需求 UP中FURPS+模型需求分类方式
    脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别
    抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
    错误码:2003 不能连接到 MySQL 服务器在 (10061)
    在ubuntu下使用mysql API读取数据库的乱码问题
    vs2010下htmlcxx的编译以及环境的搭建
    effective c++ 条款15 在资源管理类中提供对原始资源的访问
    Qt 依赖包的加载
  • 原文地址:https://www.cnblogs.com/Tester_Dolores/p/13925760.html
Copyright © 2011-2022 走看看