Git使用总结

之前项目一直使用的是SVN,唯一使用的Git就是GitHub,但是也是个人项目用到的也是几个简单Git命令,并没有团队合作开发使用过,在使用过程中难免会遇到一些新手都会遇到的问题,这篇文章就专门记录一些Git常用命令及使用过程中遇到的一些问题。

常用命令

创建项目并添加文件

1
2
3
4
5
6
7
8
# 初始化项目
git init
# 添加指定文件到缓存区
git add test.text
# 添加所有文件到缓存区,简单粗暴
git add .
# 添加提交说明
git commit -m "添加了test.text文件"

git本地仓库关联到github远程仓库

1
2
3
4
# 关联到远程仓库
git remote add origin https://github.com/UserName/ProjectName.git
# 推送到远程仓库实现同步,-u的作用是关联本地和远程仓库并将本地仓推送到远程仓
git push -u origin master

拉取最新代码

1
git pull

推送本地修改到远程仓库

1
2
3
# 推送本地到远程仓库主干或分支
# git push origin <branchName>
git push origin master

克隆项目

1
git clone https://github.com/UserName/ProjectName.git

分支管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看分支
git branch
# 创建分支
git branch <name>
# 切换分支
git checkout <name>
# 创建并切换分支
git checkout -b <name>
# 合并某分支到当前分支
git merge <name>
# 删除分支,已经推送到远程库需要两步
# 1、删除本地分支
git branch -d <name>
# 2、删除远程分支
git push origin :branchName

存储和恢复,通常用于分支间切换修复bug

1
2
3
4
5
6
7
8
9
10
11
12
# 存储当前状态
git stash
# 查看存储状态
git stash list
# 恢复指定的存储状态
git stash apply stash@{0}
# 恢复存储状态
git stash apply
# 删除存储状态
git stash drop
# 恢复存储状态并删除stash,推荐使用
git stash pop

标签管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 查看标签列表
git tag
# 创建标签
git tag <tagName>
# 创建标签
git tag -a <tagName> -m "V7.0发布了,打个标签"
# 查看最近commit id列表
git log --pretty=oneline --abbrev-commit
# 针对指定commit id打标签
git tag <tagName> <commit id>
# 删除标签
git tag -d <tagName>
# 推送指定标签到远程仓库
git push origin <tagName>
# 推送全部标签到远程仓库
git push origin --tags
# 删除标签,已经推送到远程库需要两步
# 1、删除本地标签
git tag -d <tagName>
# 2、删除远程标签
git push origin :refs/tags/<tagName>

版本回退

1
2
3
4
5
6
7
8
# 退回到上一个版本
git reset --hard HEAD^
# 退回到指定版本,只输入commit id前几位也可以
git reset --hard commit id
# 将提交到缓存中文件回退到工作区
git reset HEAD <fileName>
# 将提交到缓存中全部文件回退到工作区
git reset HEAD .

删除文件

1
2
3
4
5
6
7
8
# 删除文件
git rm <fileName>
# 删除目录及目录下所包含的文件
git rm <fileName> -r -f
# 从缓存中删除文件,但物理文件还在项目中
git rm --cached <fileName>
# 缓存和物理文件同时删除
git rm --f <fileName>

撤销修改,恢复到最近一次git commit或git add时的状态

1
2
3
4
# 放弃当前文件的修改,未加入缓存区才有效
git checkout -- <fileName>
# 放弃所有的修改,未加入缓存区才有效
# git checkout -- .

frok更新到最新的源库代码

1
2
3
4
5
6
# upstream是一个自定义命名,相当于把你克隆的项目与源项目进行一个关联
git remote add upstream https://github.com/UserName/Project.git
# 更新源项目代码
git fetch upstream
# 更新之后合并到本地,此刻可能发生冲突
git merge upstream/master

查看远程库的信息

1
2
# 忘记git地址可以使用查看
git remote -v

操作日志

1
2
3
4
# 查看操作日志
git log
# 查看历史操作日志
git reflog

查看版本状态

1
2
# 可以看修改或操作了那些文件
git status

常见问题

合并分支UserInterfaceState.xcuserstate引起冲突问题

方法一:

删除xcuserdata目录,重新合并

方法二:

全局设置忽略xcuserdata修改
1、vi .gitignore_global
2、添加xcuserdata 到文件中

总结

后续使用遇到问题或者小技巧还会持续更新。