Git基础Part2——操作使用

[TOC]

打开命令行

在win上可以到指定位置使用Git Bash(在指定目录下->右键->Git Bash Here),个人认为比较方便。

配置

查看配置

1
2
3
git config -l
git config --system --list #查看系统config
git config --global --list #查看当前用户(global)配置
  1. Git\etc\gitconfig :Git 安装目录下的 gitconfig –system 系统级
  2. C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置 –global 全局

编辑配置

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

1
2
git config [ --global ] user.name "你的用户名"  # 设置用户名
git config [ --global ] user.email "你的邮箱" # 设置注册github的邮箱

使用--global则为全局系统级别的设置,否则为仓库级别的设置。

仓库与文件

本地仓库搭建

1
git init  # 在当前目录新建一个Git代码库

此命令之后目录下生成.git隐藏文件。

首次配置url

建议直接 clone 远端创建好的项目,在其基础上进行开发。

克隆远程仓库

1
git clone [ url ]  # 克隆一个项目和它的整个代码历史(版本信息)

文件的四种状态

  • 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
1
2
git status [filename]  #查看指定文件状态
git status #查看所有文件状态

一般在IDE中查看即可。

添加文件

1
2
git add fileName  #指定文件
git add . #所有

将工作区的文件添加到暂存区

提交文件

1
git commit -m 'commit message' [ fileName ]

将暂存区内容提交到本地库

删除文件

1
2
git rm 文件名  # 删除缓存区的该文件
git commit -m"注释" # 将仓库文件删除

查看历史记录

1
2
3
4
5
git log 
git reflog # 常用
git log --greph # 图形显示,更直观
git log --pretty=oneline # 漂亮一行显示(建议)
git log --oneline # 简洁显示

HEAD@{移动到当前版本需要多少步}

前进后退

基于索引值(推荐)

1
2
git reset --hard [ commit id ]
git reset --hard a6ace91 #回到这个状态

使用 ^ 符号(只能后退)

1
git reset --hard HEAD^  # 几个 ^ 表示后退几步

使用 ~ 符号(只能后退)

1
git reset --hard HEAD~n  # 后退几步

soft:

  • 仅本地库移动HEAD 指针

mixed:

  • 在本地库移动HEAD指针
  • 重置暂存区

hard:

  • 在本地库移动HEAD指针
  • 重置暂存区
  • 重置工作区

文件差异比较

1
2
3
git diff 文件名
git diff 哈希值 文件名 # 和历史中的一个版本比较
git diff # 不带文件名,则比较多个文件

忽略文件

不想把某些文件纳入版本控制中时,可以在主目录下建立”.gitignore”文件。

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

一般可以使用JetBrain中的插件.ignore来生成。

分支管理

分支的好处

  • 同时并行推进多个功能开发,提高开发效率
  • 某一分支开发失败,不会对其它分支有任何影响

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

分支操作

  • 创建分支
1
git branch [branch]  # 新建一个分支,但依然停留在当前分支
  • 查看分支
1
2
3
git branch  # 列出所有本地分支
git branch -v
git branch -r # 列出所有远程分支
  • 切换分支
1
2
git checkout [branch]  # 切换分支
git checkout -b [branch] # 新建一个分支,并切换到该分支
  • 合并分支相当于把修改了的文件拉过来
1
git merge [branch]  # 合并指定分支到当前分支

注意:在a分支里面修改后,要合并到master,就先切换到master,然后合并a。

  • 删除分支
1
2
3
4
git branch -d [branch]  # 删除分支,注意在删除分支时要退出该分支

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

解决冲突

  • 第一步:编辑,删除特殊标记<<< ===
  • 第二步:修改到满意为止,保存退出
  • 第三步:添加到缓存区 git add 文件名
  • 第四步:提交到本地库 git commit -m '日志信息' 注意:后面一定不能带文件名

Git 结合Github

创建远程库地址别名

1
2
3
git remote -v  #查看远程地址别名
git remote add 别名 远程地址
demo:git remote add origin https://xx

推送

1
2
3
git push 别名 分支名
git push -u 别名 分支名 #-u指定默认主机
例子:git push origin master

克隆

完整的把远程库克隆到本地,克隆下来后不要在主分支里面做开发。clone进行一次,从无到有的过程,更新用pull。

1
2
git clone  远程地址
例子:git clone https://xx

拉取

本地存在clone下来的文件 就用pull更新

1
2
3
4
pull = fetch + merge
git fetch 别名 分支名
git merge 别名 分支名
git pull 别名 分支名

解决冲突

注意:解决冲突后的提交是不能带文件名的

如果不是基于远程库最新版做的修改不能推送,必须先pull下来安装冲突办法解决

rebase

1
2
3
git rebase -i 索引号
git rebase -i HEAD~3 #合并最近三条记录
说明:在vim编辑里面改成s

beyond compare

用软件解决冲突

1
2
3
4
5
6
7
8
9
1.安装 :
beyond compare
2.配置:
git config --local merge.tool bc3 #合并名称
git config --local mergetool.path '/usr/local/bin/bcomp' #软件路径
git config --local mergetool.keepBackup false #False不用保存备份
3.应用:
git mergetool
说明:--local指只在当前操作系统有效

跨团队合作

代码review之后合并

  • 适用于个人

    邀请成员:Settings –> Collaborators –>填写用户名 –>打开链接接受邀请

  • 企业 创建一个组织 方便管理

  • review

    组织做review 通过Pull request

  • 给开源社区共享代码

    点击别人仓库的fork 到自己的仓库 – > 然后clone下来 修改后推送到远程库 –> 点击Pull Request请求 –> Create pull request发消息

Tag标签

为了清晰的版本管理,公司一般不会直接使用commit提交

1
2
3
4
5
6
7
git tag -a v1.0 -m '版本介绍'   #创建本地tag信息
git tag -d v1.0 #删除tag
git push origin --tags #将本地tag信息推送到远程库
git pull origin --tags #拉取到本地

git checkout v.10 #切换tag
git clone -b v0.1 地址 #指定tag下载代码

SSH 免密登录

  • 输入ssh-keygen -t rsa -C GitHub邮箱地址
  • 进入.ssh目录,复制id_rsa.pub文件内容
  • 登录GitHub。Settings –> SSH and GPG keys –> New SSH Key
  • 回到git通过ssh地址创建。git remote add 别名 SSH地址