码迷,mamicode.com
首页 > 其他好文 > 详细

git的常见使用

时间:2021-01-21 10:48:15      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:init   use   删除   不能   rename   ref   追踪   报错   div   

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/\notepad++.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

git的常见使用

标签:init   use   删除   不能   rename   ref   追踪   报错   div   

原文地址:https://www.cnblogs.com/liqiangwei/p/14304844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!