zoukankan      html  css  js  c++  java
  • git的常见使用

    git常用命令总结

    git配置相关命令

    配置相关的命令都使用git config开始。详细请参看git config --help.常用到的git配置命令如下:

    1. 查看git所有配置项
      1. git config -lgit config --list
    2. 直接修改配置文件
      1. git config -e --global:此命令会调出配置文件。
    3. 邮箱和用户名配置
      1. 配置全局的邮箱和用户名
        1. git config --global user.name "user name"
        2. git config --global user.email "xxx@nnn.com"
      2. 为某个项目配置本地的邮箱和用户名
        1. git config user.name "user name"
        2. git config user.email "xxx@nnn.com"
    4. 设置编辑器
      1. git config --global core.editor "path/ otepad++.exe -multiInst -notabbar -n"

    git远程仓库相关的命令

    远程相关的命令都使用git remote开始。详细请参看git remote --help.常用到的远程命令如下:

    当我们使用git clone克隆远程仓库时,git会自动创建一个远程仓库名origin.与远程仓库的URL连接。自动把本地的master分支和远程的master分支对应起来了。

    1. 查看远程库的名字与信息
      1. git remote
      2. git remote -v:显示更详细的信息。包括URL
      3. git remote show <remote_name>:查看某个远程仓库详细信息。包括跟踪的分支信息。
    2. 添加远程库
      1. git remote add <name> <url>:name表示为远程仓库分配的名称,url为远程仓库的地址。
    3. 远程仓库重命名
      1. git remote rename <oldname> <newname>:
    4. 删除添加的远程库
      1. git remote remove name

    git克隆相关命令

    git使用git clone命令进行仓库的克隆。常用命令参数如下:

    1. -o name:使用指定的name代替origin名。
    2. -b branch_name:克隆指定的分支。
    3. --single-branch:只克隆指定分支。配合-b选项使用
    4. --depth=n:克隆的深度,克隆最近n次的commit.

    常用clone例程:

    1. git clone git@git.n.xxx.git:克隆远程仓库所有内容。
    2. git clone git@git.n.xxx.git newname:克隆远程仓库所有内容并指定新名称。

    git分支相关的命令

    1. 查看仓库的分支信息
      1. git branch:查看所有本地分支.当前分支前面会标一个*。常用参数如下:
        1. -a:查看所有的分支,包括远程分支
        2. -v:查看分支指向的commit
        3. -vv:查看本地分支与远程分支的匹配关系
        4. --merged:查看合并的分支
        5. --no-merged:查看没有合并的分支
    2. 创建分支
      1. git branch <branch name>:在当前提交上创建一个分支
      2. git branch <branch name> <base_name>:基于指定的某个commit或者分支创建分支。base_name为commit号或分支名。
    3. 切换分支
      1. git checkout <branch name>
      2. git checkout -b <branch name>:创建并切换(当分支已经存在时切换不了)
      3. git checkout -b dev origin/dev:创建本地的dev分支并与远程的origin/dev分支连接。
    4. 删除分支
      1. git branch -d <branch name>:删除指定分支.-D为强制删除
    5. 如果您已经有一个本地分支,并希望将其设置为刚刚下拉的远程分支,或者希望更改正在跟踪的上游分支
      1. git branch --set-upstream-to=origin/<branch> dev
        1. --set-upstream-to-u同义。

    git提交相关的命令

    1. 查看仓库文件的状态
      1. git status:查看详细状态,有下面一些描述状态。
        1. nothing to commit, working tree clean:所有的更改都已经提交到本地仓库了。
        2. no changes added to commit:更改了文件,但没有存放到暂存区(没有执行git add命令)
        3. Changes to be committed:对更改文件做了缓存,但没有提交。
      2. git status -s,git status -short
        1. ??:未跟踪
        2. a :未跟踪文件使用git add命令添加到暂存区时标记此状态。
        3. M :修改。即对文件进行了修改,但未使用git add命令添加到暂存区。
        4. MM:同时处于修改阶段和暂存阶段。即已经使用git add命令添加到暂存区,然后又进行了修改。
    2. 将文件添加到暂存区
      1. git add filename。filename 可以是.,代表所有文件。也可以是表达式如*.c,代表所有的c文件。
    3. 将文件提交到本地仓库。命令为git commit,常用选项如下:
      1. -m "message".message为提交时的说明信息。可以使用"message. Ref #xxx"格式绑定issue。
      2. -v:提交时可以查看详细的修改信息。
      3. -a:自动将工作区中的内容添加到暂存区,然后提交。
      4. -s:提交时添加提交者信息。
      5. --amend:修改本地某次的提交信息.

    git对比文件相关的命令

    git diff命令用于比较文件之间的不同。常见选项如下

    1. 直接使用git diff:比较工作区与暂存区的各个文件区别
    2. 比较暂存区与最后一次提交的区别
      1. git diff --staged
    3. 比较两次提交之间的差异
      1. git diff [commit1]...[commit2]

    git log日志相关的命令

    git log用于查看提交日志

    1. 直接使用git log:列出所有历史记录,最近的排在最上方.q退出。
      1. -p:(patch)列出每个commit不同的详细信息。
      2. -n:显示前n条.
      3. -stat:查看概要
      4. --no-merges:防止显示合并提交
      5. --since:指定查看时间。如两天前的提交历史git log --since=2.days
      6. --author:指定作者。如指定作者为"BeginMan"的所有提交git log --author=BeginMan
      7. --grep:指定关键字。如指定关键字为“init”的所有提交git log --grep=init
      8. --committer:指定提交者。如指定提交者为"Jack"的所有提交git log --committer=Jack
      9. --pretty:指定显示格式。如每个提交信息显示一行。git log --pretty=oneline
        1. 选项可以是oneline,short,medium,full,fuller,email,raw以及format。详见progit文档。34页。
      10. -S:通过查询文件的变更内容来检索出指定提交日志.如git log -S xxx
    2. git log [-option] filename:查看指定文件的log日志。filename也可以是分支名。如果分支名与文件名相同,系统会提示错误,可通过选项来指定给定的参数是分支名还是文件名
    3. git log --oneline --decorate:查看分支与commit的关系

    回退/撤销等操作命令

    git reset用于回退相关操作。reset的三种方式:
    介绍详见:https://www.jianshu.com/p/c2ec5f06cf1a

    1. git reset --hard HEAD^:将工作区,暂存区、仓库全都恢复到上一个版本。主要用于放弃本地所有的修改。

    2. git reset --soft HEAD^:只将仓库恢复到上一个版本,工作区和暂存区的内容不变。这个功能主要用来合并多个commit.

    3. git reset --mixed HEAD^:(reset的默认方式)。将仓库和暂存区恢复到上一个版本,工作区内容不变。

    4. git reset HEAD^:回退所有内容到上一个版本

    5. git reset HEAD^ a.py:回退a.py这个文件的版本到上一个版本

    6. git reset –soft HEAD~3:向前回退到第3个版本

    7. git reset –hard origin/master:将本地的状态回退到和远程的一样

    8. git reset 057dcc:回退到某个版本

    9. git revert HEAD:回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit

    10. git reset HEAD CONTRIBUTING.md:将缓冲区的内容撤回到工作区

    11. git checkout -- filename:撤销工作区中被修改的内容.用于文件还没有执行git add之前的修改。

    git向远程仓库提交相关命令

    1. 向远程分支推送.git push <远程仓库名> <本地分支名>:<远程分支名>:这里的:前后是必须没有空格的。

      1. 如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建.如git push origin master.
      2. 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。如git push origin :master.它等同于git push origin --delete master
      3. 常见选项如下:
        1. -u remote_name:如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push.
        2. --force:强制推送。
        3. --force-with-lease:没有人在上游更新分支内容,时才可以强制推送。
        4. --all:不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机.
        5. --delete:用于删除某个远程分支。如git push origin --delete <branch_name>
      4. 默认只推送当前分支.
    2. 从远程分支拉取

      1. git fetch <remote> <branch>:将远程仓库拉取到本地。如git fetch origin master
      2. git pull <remote> <branch>:从远程获取最新版本并merge到本地。如git pull origin master

    使用--force--force-with-lease强制向master分支推送时可能依然会报错(You are not allowed to force push code to a protected branch on this project.)这是由于gitlab等服务器设置了主分支保护造成的。可以在"Settings" -> “Repository” -> scroll down to “Protected branches”.取消。

    如果使用http url推送,每次提交时都会要求输入用户名和密码,为了方便,可以使用git config --global credential.helper cache来缓存。

    git合并相关的命令

    1. 合并:git merge --no-ff -m "merged bug fix 101" issue-101
      1. –no-ff:表示普通合并。

    git merge --abort:终止合并

    合并流程:以A分支向B分支合并为例。

    1. 切换到B分支目录。git checkout B.
    2. 确保B分支是干净的。
    3. 合并git merge A
    4. 如果有冲突需要解决冲突。然后commit.
    5. 使用git log查看合并结果

    rebase(变基)

    变基使得提交历史更加整洁。你在查看一个经过变基的分支的历史记录时会发现,尽管实际的开发工作是并行的,但它们看上去就像是先后串行的一样,提交历史是一条直线没有分叉。

    git rebase master:将当前分支变基到maser分支上
    git rebase -i HEAD~3

    git杂项命令

    1. git help <cmd>:获取命令的详细帮助
    2. git add -h:获取add命令的简单帮助
    3. git rm filename:删除某个文件。filename可以是表达式。如
      //*前必须要有
      git rm log/*.log
      • 1
      • 2
    4. git rm --cached filename将某个文件从暂存区踢出。使其不受版本管理,这个文件仍然存在于工作区。
    5. git mv file_from file_to:移动文件

    git 将修改内容暂存

    1. git stash:把当前工作现场“储藏”起来,等以后恢复现场后继续工作.
    2. git stash pop:恢复的同时把stash内容也删了.
    3. git stash list

    git子模块的使用

    子模块简单的说就是项目需要包含并使用另一个项目。子模块允许你将一个git仓库作为另一个git仓库的子目录。它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。

    将一个已存在的git仓库添加为正在工作的仓库的子模块:

    1. git submodule add myproject_url.git
      1. 默认情况下,子模块会将子项目放到一个与仓库同名的目录中。如果你想要放到其他地方,那么可以在命令结尾添加一个不同的路径。如:``.
      2. 执行此命令后,会生成一个.gitmodules的文件,保存着模块的相关信息。

    克隆含有子模块的仓库:

    1. 如果我们已经clone了项目,但没有包含子模块内容时,使用如下命令:
      1. git submodule init
      2. git submodule update
    2. 当然,可以选择在clone项目同时clone子模块,如下
      1. git clone --recurse-submodules myproject_url.git

    tag标签

    git tag:查看所有标签(默认为按字母顺序排序)
    git tag -l "v1.8.5*":查看感兴趣的分支
    git tag -a v1.4 -m "my version 1.4":创建标签
    -a:表示带注释的标签
    git支持两种类型的tag:

    1. lightweight:类似分支,不能修改
    2. annotated:带注释的tag
      git push origin --tags:推送标签到remote
      git checkout tag:检出标签
      git checkout -b version2 v2.0.0:基于某个标签创建分支
      git运行外部命令,用别名包装,外部命令用!修饰
      git config --global alias.visual '!gitk'

    git相关文件介绍

    每个仓库都有一个.git的文件,用来管理仓库。

    config文件

    config文件:存储仓库的配置信息,里面包含了仓库的远程地址,分支等信息。

    gitignore文件

    .gitignore文件可以有多个,每个此文件只负责它一个它的子目录。

    支持正则表达式
    [abc]:匹配括号中的任何字符。如a,b,c.
    ?:匹配单个任意字符
    *:跨多个路径
    **:匹配多个任意字符
    [0~9]:匹配一个范围
    !:不包括某个文件

    eg:

    *.a
    !lib.a
    /TODO
    build/
    doc/*.txt
    doc/**/*.pdf
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

  • 相关阅读:
    Sql Server 跨服务器连接
    ASCII码与16进制的互相转换(表)
    c#多线程 Invoke方法的使用
    登陆时验证码的制作(asp.net)
    jQ&js给label
    IT行业的一些专业术语
    html div 加边框样式
    分布式技术 memcached
    分布式技术 webservice
    MVC 绑定 下拉框数据
  • 原文地址:https://www.cnblogs.com/liqiangwei/p/14304844.html
Copyright © 2011-2022 走看看