Git基础命令及常见问题解决方法

一、Git简介

首先简单介绍一下Git。Git 是一个开源的分布式版本控制系统。那与传统的集中式,比如cvs,svn有什么区别呢?

  • 集中式顾名思义,集中存放在中央服务器。干活的时候,必须联网,首先要从中央服务器取得最新的版本。完了后,把自己的提交到中央服务器上。
  • 分布式,没有正式的中央服务器,每个人的电脑上都是一个完整的版本库。干活的时候,不需要联网。各自干各自的活,完了后,提交到自己电脑的版本库中就行。而且比集中式安全的多,即使某个人的电脑坏了,可以从其他人的版本库拷贝一份。而集中式的中央服务器坏了,那就没法干活了。

二、Git基础命令

1.创建与获取
  • 初始化Git仓库 。 git init
  • 连接远程仓库。git remote add [远程库别名] [url]
  • 克隆一个远程仓库。git clone [url]
2.暂存区、版本库
  • 提交到暂存区。 git add
  • 查看项目文件在工作目录与暂存区的状态。 git status -s
  • 显示已写入暂存与已修改但尚未写入暂存的区别。git diff
  • 提交到版本库。 git commit -m "说明"
  • 删除暂存区与工作目录文件。git rm [文件名]
  • 查看历史命令。git reflog
  • 版本回退。git reset --hard [提交id]
  • 查看提交历史。git log
  • 工作区某个文件修改后,撤销修改。git checkout [某个文件名]
  • 某个文件修改后已提交到暂存区,撤销暂存区修改。git reset HEAD [某个文件名]
3.分支管理
  • 列出分支。git branch
  • 切换分支。git checkout [分支名] git switch [分支名]
  • 删除分支。git branch -d [分支名]
  • 强制删除分支。git branch -D [分支名]
  • 删除远程分支。git push [远程库别名] --delete [分支名]
  • 创建分支。git branch [分支名]
  • 以一个提交commit来创建分支。git switch -c [分支名] [commit]
  • 创建并切换到新分支。git checkout -b [分支名] git switch -c [分支名]
  • 合并分支。git merge [分支名]
  • 查看分支合并图。git log --graph
4.与远程库的操作
  • 把本地库推送到远程库。git push <-u> [远程库别名] [分支名(本地,远程同名)];
    git push [远程库别名] [本地分支名]:[远程分支名]; -u设置默认
  • 拉取远程库并合并到本地库。git pull [远程库别名] [分支名]
  • 拉取远程库。git fetch
  • 查看远程库地址。git remote –v
  • 建立本地库分支和远程库分支的关联。git branch --set-upstream [分支名] [远程库别名]/[远程分支名]
  • 拉取远程分支到本地(本地没有)。git switch [远程分支名]
5.标签管理
  • 查看所有标签。git tag
  • 当前提交打个标签。git tag [标签名]
  • 历史提交打个标签。git tag [标签名] [历史提交id]
  • 查看某个标签信息。git show [标签名]
  • 删除标签。git tag -d [标签名]
  • 删除远程库标签,要先删本地库。git push [远程库别名]:refs/tags/[标签名]
  • 把标签推送到远程库。git push [远程库别名] [标签名]
  • 多个本地标签一次性推送到远程库。git push [远程库别名] --tags
6.子模块管理
  • 原项目中增加子模块。git submodule add [子模块url]
  • 克隆含有子模块的项目。(1)git clone [项目url] (2)进入子模块目录git submodule init初始化本地配置文件 (3)git submodule update检出数据

三、常见问题及解决方法

1.git怎么在git add . 时忽略一些文件的提交

在Git项目根目录中定义.gitignore文件。在.gitingore 文件中,遵循相应的语法,在每一行指定一个忽略规则。如下:

*.log
*.temp
/target

忽略.log .temp结尾的及根目录下的target文件夹下的文件。.gitignore注释用'#', *表示匹配0个或多个任意字符,?表示匹配单个任意字符。当然还有更详细的优先级及匹配规则。这里就点到为止。

2.远程仓库与本地仓库冲突

方法一

  • 拉取到一个新分支。git fetch [远程库别名] [远程分支]:newBranch
  • 比较新分支和本地分支的区别并修改冲突。git diff newBranch
  • 分支合并。git merge newBranch [--allow-unrelated-histories]

注意:其中--allow-unrelated-histories是可选项,当报错“refusing to merge unrelated histories”时加上该选项就可以进行merge。 在进行pull操作时如果也报这个错误也可以加上这个选项。

  • 提交。 git push
  • 删除新分支。 git branch -d newBranch

方法二

  • git stash 将本地代码stash到缓存。
  • git pull 将远程代码拉取到本地。
  • git stash pop 将缓存中的代码合到本地最新代码中。git stash pop默认将最近一次stash操作的缓存内容弹出。git stash apply只获取,不弹出。git stash pop stash@{Number}指定某次stath操作的缓存。
  • git stash show 显示stash合并到本地代码后,哪些文件会修改,以及修改的概述。
  • git stash clear清除所有缓存内容。
3.在windows中操作git reset --hard HEAD^ 报错

因为^在window是特殊字符。使用git reset --hard HEAD~1或git reset --hard "HEAD^"。

你可能感兴趣的:(Git基础命令及常见问题解决方法)