Loading

Git常用命令及操作

Git常用命令及操作

环境配置

设置用户名称和email

git config --global user.name "tom"
git config --global user.email "tom@test.com"

每次Git提交都会使用该用户信息。

查看配置信息

# 查看所有配置信息
git config -l

# 查看全局用户配置
git config --global --list

# 查看系统配置
git config --system --list

C:\Users\Administrator\.gitconfig 查看登录用户的配置 --global全局

D:\Git\etc\gitconfig Git安装目录下 --system系统

获取Git仓库

获取Git仓库通常有两种方式:

  • 在本地初始化一个Git仓库

  • 从远程仓库克隆

创建本地git 仓库

# 创建目录
mkdir [projectName]
cd [projectName]

# 初始化仓库
git init

远程仓库克隆

git clone [url]

工作目录、暂存区以及版本库概念

  • Workspace:工作区,就是你平时存放项目代码的地方
  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

文件的四种状态

概念

untracked 未跟踪(未被纳入版本控制)

tracked 已跟踪(被纳入版本控制)

  • Unmodified 未修改状态

  • Modified 已修改状态

  • Staged 已暂存状态

Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

文件状态操作

# 查看文件状态
git status

# 查看文件状态(输出信息更加简洁)
git status –s

# 将未跟踪的文件加入暂存区
git add [filename]

# 添加所有文件到暂存区
git add .

# 将暂存区的文件取消暂存
git reset [filename]

# 提交暂存区中的内容到本地仓库 -m 提交信息
git commit -m "消息内容" 

# 删除本地仓库文件
git rm [filename]

# 查看日志记录
git log

.gitignore忽略文件

在主目录下建立".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

远程仓库操作

查看远程仓库

# 查看远程仓库(默认origin)
git remote 

# 显示所有远程仓库
git remote -v

# 添加远程仓库
git remote add [remote-name] [url]

# 移除无效的远程仓库
git remote rm [remote-name]

注意:git remote rm [name]只是从本地移除远程仓库的记录,并不会真正影响到远程仓库

从远程仓库中抓取与拉取

git fetch origin [branch-name]是从远程仓库获取最新版本到本地仓库,不会自动merge。

git pull origin [branch-name]是从远程仓库获取最新版本并merge到本地仓库。

注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数--allow-unrelated-histories

推送到远程仓库

git push [remote-name][branch-name] 可以将其推送到远程仓库。

例如:git push origin master 推送master主分支到远程仓库.

Git分支

Git 的master分支并不是一个特殊分支。 它跟其它分支没有区别。 之所以几乎每一个仓库都有 master 分支,是因为git init 命令默认创建它。

# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 列出所有本地分支和远程分支
git branch -a

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch-name]

# 推送至远程仓库分支 
git push origin [branch-name]

# 合并指定分支到当前分支
git merge [branch-name]

# 删除分支
git branch -d [branch-name]

# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

合并分支: 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没办法合并它们,同时会提示文件冲突。此时需要我们打开冲突的文件并修复冲突内容,最后执行git add命令来标识冲突已解决

删除分支: 如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

Git标签

# 列出所有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]
posted @ 2020-11-15 23:25  飞火流鸢  阅读(100)  评论(0编辑  收藏  举报