Skip to content

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操作01.png

安装完成后,右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端。

在 Git Bash 终端里输入 git --version 查看 git 版本,如图所示,说明 Git 安装成功。

git操作02.png

安装完成后,还需要最后一步设置,在命令行输入:

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、在远程仓库点击派生

git操作03.png

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 冲突产生 和 解决方案 思维导图

git操作04.png