git 操作
一、git 安装
1、在 Mac OS X 上安装 Git
如果你正在使用 Mac 做开发,有两种安装 Git 的方法。
一是安装 homebrew,然后通过 homebrew 安装 Git,具体方法请参考 homebrew 的文档:http://brew.sh/。
第二种方法更简单,也是推荐的方法,就是直接从 AppStore 安装 Xcode,Xcode 集成了 Git,不过默认没有安装,你需要运行 Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
2、在 Windows 上安装 Git
官网下载地址:https://git-scm.com/downloads
可以从 Git 官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端。
在 Git Bash 终端里输入 git --version
查看 git 版本,如图所示,说明 Git 安装成功。
安装完成后,还需要最后一步设置,在命令行输入:
bash
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为 Git 是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和 Email 地址。
二、git 常用命令
命令名称 | 作用 |
---|---|
git checkout 分支名 | 切换分支 |
git checkout -b 分支名 | 创建并切换分支 |
git checkout -d 分支名 | 删除分支 |
git merge 分支名 | 合并分支 |
git status | 查看当前状态 |
git init | 初始化仓库 备注:vue 项目不需要初始化 |
git log | 查看 commit 提交日志 |
git reflog | 查看所有的历史记录 |
git reset | 版本回退 |
git helper -a | 查看全部 git 子命令 |
git -version | 查看 git 版本 |
git branch "新建分支名" | 创建分支 |
git branch | 查看本地所有分支 |
git branch -r | 查看远程所有分支 |
git branch -a | 查看本地和远程分支 |
git branch -d "某分支名" | 删除某分支 |
git switch -c dev | 创建并切换到新的 dev 分支 |
git switch master | 直接切换到已有的 master 分支 |
git add "文件名" | 将某个文件存入暂存区 |
git add . | 将所有文件存入暂存区 |
git commit -m "备注信息" | 提交到仓库 |
git diff | 查看变更 工作区和暂存区的差别比对 |
git push <远程主机名><本地分支>:<远程分支> | 完整写法,推送到远程 |
git push origin master | 将本地的 master 分支推送到远程的 master 分支,如果 master 不存在 则会创建 master 分支 |
git push <新建分支名> | 将新建分支推送到远程分支 |
git push origin :master | 如果忽略本地分支,则推送了一个空分支,相当于删除了分支。 等同于 git push origin --delete <要被删除的分支名> |
git push | 将本地分支推送到远程分支,如果当前分支和远程分支之间存在追踪关系,则本地分支和远程分支都可以省略 |
git push origin --delete <要删除的分支名> | 删除远程分支 |
git fetch origin master | 将远程分支下拉到本地 |
git pull <远程分支地址> <远程分支名>:<本地分支名> | 完整写法 例如,git pull origin next : master .将远程分支与 next 分支合并。 |
git pull origin master | 获取远程分支,并于当前分支合并 |
git fetch origin master | 获取远程分支 master 到本地,不合并 |
git clone "远程地址" | 将远程代码克隆到本地 |
git merge "分支名" | 把分支合并到当前分支上 |
git remote add origin git 项目地址 | 本地仓库和远程仓库建立连接 |
git remote -v | 查看远程关联的地址 |
git remote remove origin | 移除远程关联 |
三、合并分支
假如我们现在在 dev 分支上,刚开发完项目,执行了下列命令:
bash
git add '文件名' # 不要使用git add . 进行全部提交
git commit -m '提交的备注信息'
git push -u origin dev
想将 dev 分支合并到 master 分支,操作如下:
1、首先切换到 master 分支上
js
git checkout master
2、如果是多人开发的话 需要把远程 master 上的代码 pull 下来
js
git pull origin master
//如果是自己一个开发就没有必要了,为了保险期间还是pull
3、然后我们把 dev 分支的代码合并到 master 上
js
git merge dev
4、然后查看状态及执行提交命令
js
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
四、派生
1、在远程仓库点击派生
2、git remote add mycode url 添加派生后的仓库地址
3、git remote -v 查看远程仓库
五、代码提交流程
1、把项目克隆到本地
git clone url
2、派生
3、提交变更代码
3.1、查看变更 信息
git status
3.2、添加变更文件 到 暂存区
git add 文件名
3.3、提交 暂存区 文件 到 本地仓库
git commit -m "提交备注"
3.4、推送 本地仓库 到 远程仓库
bash
git push mycode # 推送到派生的仓库
3.5、创建合并请求
在私有库里创建合并请求,并让项目管理人进行合并
3.6、更新代码
3.6.1、更新差异到本地仓库(只更新本地仓库,不影响所有分支代码)
bash
git fetch [数据源] [分支名]
git fetch origin master
3.6.2、合并差异文件(将差异文件合并到指定分支)
bash
git merge [数据源]/[分支名]
git merge origin/master
3.7、解决冲突
3.7.1、commit 代码
3.7.2、推送代码(推送失败 需要更新代码)
bash
git push [数据源] [分支名]
git push mycode
操作结果
bash
Administrator@SDWM--20170715Z MINGW64 ~/Desktop/good (master)
$ git push origin master
To https://github.com/Jeremyljm/python-test.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/Jeremyljm/python-test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
3.7.3、更新差异到本地仓库(只更新本地仓库,不影响所有分支代码)
bash
git fetch origin master
操作结果
bash
Administrator@SDWM--20170715Z MINGW64 ~/Desktop/good (master)
$ git fetch origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/Jeremyljm/python-test
* branch master -> FETCH_HEAD
c229456..61d8fe7 master -> origin/master
3.7.4、合并差异文件(将差异文件合并到指定分支)
bash
git merge origin/master
3.7.4.1、 操作结果 (提示冲突 需要解决冲突)
bash
Administrator@SDWM--20170715Z MINGW64 ~/Desktop/good (master)
$ git merge origin/master
Auto-merging aaa.py
# 冲突(内容):在aaa.py中合并冲突
CONFLICT (content): Merge conflict in aaa.py
# 自动合并失败;修复冲突,然后提交结果。
Automatic merge failed; fix conflicts and then commit the result.
3.7.4.2 查看冲突文件 的冲突内容
bash
git diff [对比文件名]
git diff aaa.py
操作结果
bash
Administrator@SDWM--20170715Z MINGW64 ~/Desktop/good (master|MERGING)
$ git diff aaa.py
diff --cc aaa.py
index 3403bd6,24b947b..0000000
--- a/aaa.py
+++ b/aaa.py
@@@ -18,5 -18,5 +18,9 @@@ __mtime__ = '2018/12/28
????????????????? ┃┫┫? ┃┫┫
????????????????? ┗┻┛? ┗┻┛
"""
++<<<<<<< HEAD
+print("王诗林")
++=======
+ print("邬晓峰")
++>>>>>>> origin/master
print("测试")
<<<<<<< HEAD 到 ======= 为你本地的代码
======= 到 >>>>>>> 仓库转移 为别人的代码
每段冲突代码都以<<<<<<< HEAD 开始以>>>>>>> 仓库转移(仓库转移为提交时的备注)结束
按需删除即可
3.7.4.3、 修改冲突 文件内容 (vi 编辑器或其他文本编辑器)
bash
vi aaa.py
# 进入插入状态
ins
操作结果 (打开文件 修改内容)
bash
# 退出插入状态
ESC
# 调起命令
shift + :
# 保存并推出
wq
# 查看文本是否更新成功
cat
3.7.4.4、commit 代码
git 冲突产生 和 解决方案 思维导图