Git使用技巧
# Git的安装[应用]
最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。由于开发机大多数情况都是windows,所以本教程只讲解windows下的git的安装及使用。
# (一)软件下载
下载地址:https://git-scm.com/download (opens new window)
# (二)软件安装[应用]
# 1.安装git for windows
一路“下一步”使用默认选项即可。注意:安装路径不要用中文
验证安装是否成功在任何一个目录下右键看是否有菜单
# 克隆
- 普通克隆
git clone <远程仓库地址>
- 克隆指定分支
git clone -b <指定分支名> <远程仓库地址>
# 创建一个新项目
git init //初始化
git add . //点号小时向仓库添加所有文件
git add README.md //增加一个readme.md文件
git commit -m "first commit" // 进行提交, -m 表示 添加备注
git branch -M main //branch表示切换分支
git remote add origin xx // 关联远程地址
git push -u origin main //推送项目,main为当前的分支,可以简写: git push
2
3
4
5
6
7
# 新建分支并推送到远端
// 查看所有分支
- 本地:git branch
- 远端:git branch -a
// 新建分支
git branch xx
// 切换分支
git checkout xx
// 推送远端
git push origin xx
2
3
4
5
6
7
8
9
10
11
12
# 切换分支
假如我们现在在dev分支上,刚开发完项目,执行了下列命令:
git add .
git commit -m '提交的备注信息'
git push -u origin dev
2
3
想将dev分支合并到master分支,操作如下:
- 1、首先切换到master分支上
git checkout master
- 2、如果是多人开发的话 需要把远程master上的代码pull下来
git pull origin master //如果是自己一个开发就没有必要了,为了保险期间还是pull
- 3、然后我们把dev分支的代码合并到master上
git merge dev
- 4、然后查看状态及执行提交命令
git status
On branch master Your branch is ahead of 'origin/master' by 12 commits.
(use "git push" to publish your local commits) nothing to commit, working tree clean
//上面的意思就是你有12个commit,需要push到远程master上 > 最后执行下面提交命令 git push origin master
2
3
4
- 5其他命令
git remote update origin // 更新远程分支列表
git branch -a // 查看所有分支
git push origin --delete xx // 删除远程分支 xx
git branch -d xx // 删除本地分支
git branch -m xx // 修改本地分支名
2
3
4
5
# 本地检出远程分支
# 1.可以查看本地当前分支,为master
git branch
# 2.本地创建分支,并检出想要的远程分支demo
git checkout -b demo(本地分支) orgin/demo(远端分支)
可以git branch查看下本地当前的分支
# 3.更新本地仓库
git fetch
# 4.本地切换到刚刚检出的远程分支
git checkout demo
# git rebase篇
暂无
# 新增tag标签
# 列出标签
git tag
# 查看指定tag版本
git tag -l "版本号"
# 附注标签
// 在 Git 中创建附注标签十分简单。 最简单的方式是当你在运行 tag 命令时指定 -a 选项:
git tag -a 版本号 -m "备注信息"
// -m 选项指定了一条将会存储在标签中的信息。
// 如果没有为附注标签指定一条信息,Git 会启动编辑器要求你输入信息。
2
3
4
5
6
# 查看版本对应提交日志
git show 版本号
# 轻量标签
另一种给提交打标签的方式是使用轻量标签。 轻量标签本质上是将提交校验和存储到一个文件中——没有保存任何其他信息。 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字:
git tag 版本号
# 后期打标签
你也可以对过去的提交打标签。 假设提交历史是这样的:
git log --pretty=oneline
// 只查看hash 部分
git log --oneline
2
3
4
你也可以对过去的提交打标签。 假设提交历史是这样的:
现在,假设在 v1.2 时你忘记给项目打标签,也就是在 “updated rakefile” 提交。 你可以在之后补上标签。 要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和):
git tag -a v1.2 9 fceb02
# 共享标签
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样——你可以运行 git push origin 。
git push origin v1.5
如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。
git push origin --tags
# 删除标签
要删除掉你本地仓库上的标签,可以使用命令 git tag -d 。 例如,可以使用以下命令删除一个轻量标签:
git tag -d 标签名
注意上述命令并不会从任何远程仓库中移除这个标签,你必须用 git push :refs/tags/ 来更新你的远程仓库: 第一种变体是 git push :refs/tags/ :
git push origin :refs/tags/标签名
上面这种操作的含义是,将冒号前面的空值推送到远程标签名,从而高效地删除它。 第二种更直观的删除远程标签的方式是:
git push origin --delete 标签名
# 回退命令
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commit_id 退到/进到 指定commit的sha码
2
3
# 强推到远程
git push origin HEAD --force
# 常见问题
# 一、远程仓库已初始化分支与本地分支合并
解决
出现这个问题的最主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库。假如我之前是直接clone的方式在本地建立起远程仓库的克隆本地仓库就不会有这问题了。
查阅了一下资料,发现可以在pull命令后紧接着使用--allow-unrelated-history
选项来解决问题(该选项可以合并两个独立启动仓库的历史)。
git pull origin master --allow-unrelated-histories
以上是将远程仓库的文件拉取到本地仓库了。 紧接着将本地仓库的提交推送到远程github仓库上,使用的命令是:
git push <远程主机名> <本地分支名>:<远程分支名>
// 也就是
git push origin master:master
2
3
# 
# 常见的大写字母
A: 增加的文件.
C: 文件的一个新拷贝.
D: 删除的一个文件.
M: 文件的内容或者mode被修改了.
R: 文件名被修改了。
T: 文件的类型被修改了。
U: 文件没有被合并(你需要完成合并才能进行提交)
X: 未知状态。(很可能是遇到git的bug了,你可以向git提交bug report)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 补充Git命令
查看远程仓库: git remote –v
**删除远程仓库:**git remote rm [name]
拉取远程仓库:$git pull [remoteName] [localBranchName]
**推送远程仓库:**git push [remoteName] [localBranchName]
分支(branch)操作相关命令查看本地分支:$ git branch
**查看远程分支:**git branch –r
创建本地分支: git branch [name] ----注意新分支创建后不会自动切换为当前分支
**创建新分支并立即切换到新分支:**git checkout -b [name]
删除分支: git branch -d [name]
-d选项只能删除已经参与了合并的分支,对于未有合并的分 支是无法删除的。如果想强制删除一个分支,可以使用-D选项
**合并分支:**git merge [name]
将名称为[name]的分支与当前分支合并创建远程分支
(本地分支push到远程):$ git push origin [name]
**删除远程分支:**git push origin :heads/[name]
版本(tag)操作相关命令查看版本:$ git tag
**创建版本:**git tag [name]
**删除版本:**git tag -d [name]
**查看远程版本:**git tag –r
**创建远程版本(本地版本push到远程):**git push origin [name]
**删除远程版本:**git push origin :refs/tags/[name]
**子模块(submodule)相关操作命令添加子模块:**git submodule add [url] [path]
初始化子模块: git submodule init ----只在首次检出仓库时运行一次就行
更新子模块: git submodule update ----每次更新或切换分支后都需要运行一下
**删除子模块:**git rm --cached [path]
查看当前所属分支: git branch -vv
查看配置文件信息: git config --lis
查看远程分支: git remote -v