git 基本操作命令,冲突解决

原博客地址:
http://24suixinsuoyu.com/2016/07/27/Git-%E5%91%BD%E4%BB%A4%E6%80%BB%E7%BB%93/

git 安装

Git和SVN一样,都需要创建一个服务器的,他们都可以创建自己的版本管理服务器。对于个人和小团队来说,使用托管服务器可能更合适。
常见的有Github 和 Bitbucket。Github没有个人免费仓库使用,代码放上去就是开源的。Bitbucket的个人仓库相关页面已经基本汉化了。注册流程也比较简单。
MAC上最好的GIT免费GUI工具是SourceTree(没有之一)。此外,最好的GIT代码开源网站是GitHub,最好的GIT代码私有库是BitBucket。
安装过程:
1,下载Git installer,地址;http://git-scm.com/downloads
2,下载之后打开,双击.pkg安装
3, 打开终端,使用git –version或者which git命令查看安装版本,有就是安装成功了
4,创建一个全球用户名、全球邮箱,设置全局配置
git config –global user.name “用户名”
git config –global user.email “对应邮箱”
5、进入你的项目目录
转载于 http://www.jianshu.com/p/e9dd2849cfb0

cd d:/wamp/www/wap              //首先指定到你的项目目录下
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/youtname/vscode.git   
//用你仓库的url,vscode.git中vscode为仓库名称,使用时必须先创建
git push -u origin master  //提交到你的仓库

一、Add & Commit

1、add

  1. git init

    初始化一个 Git 仓库(repository),即把当前所在目录变成 Git 可以管理的仓库。

  2. git add 文件

    把文件添加到 暂存区(stage),可被 track 追踪纪录下来。可多次使用来添加多个文件

  3. git add *

    添加所有修改到暂存区

  4. git add .

    暂存新增加的和修改的文件,不包括已删除的文件。即当前目录下所有文件

  5. git add -u

    暂存修改的和删除的文件,不包括新增加的文件

  6. git add -i

    交互式添加文件到暂存区

  7. git add -p

    暂存文件的一部分

2、commit

  1. git commit -m "本次提交说明"

    一次性把暂存区所有文件修改提交到仓库的当前分支。注意:提交信息可为中文也可为英文,若为英文则通常用一般现在时。如果不加参数 -m 则会跳转到编辑器强制填写提交说明信息。

  2. git commit -am "本次提交说明"

    Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤,参数 -am 也可写成 -a -m。“在 oh-my-zsh 下,直接用 gcam “message” 就搞定了”

  3. . git commit --amend

    重新提交,最终只会有一个提交,第二次提交将代替第一次提交的结果。尤其适用于提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了的情况。

  4. git commit --amend --reset-author

    在上一次 commit 之后想重新更新一下时间。amend 实际上修改了上一个 commit。所以如果已经 push 了上一个 commit,请尽量不要 amend。如果一定要 amend 已经 push 了的 commit,请确保这个 commit 所在的 branch 只有你一个人使用(否则会给其他人带来灾难),然后在 amend 之后使用 git push –force。只要多加小心,该命令貌似没什么卵用。

  5. git commit -p
    commit 文件的一部分,适合工作量比较大的情况。之后,Git 会对每块修改弹出一个提示,询问你是否 stage,按 y/n 来选择是否 commit 这块修改,? 可以查看其他操作的说明。

二、Diff & Status

1、Status

  1. git status

    显示当前仓库的最新状态:

    • 工作区就是“干净的”,即没有新的修改
    • 最上面显示的是在 staging area,有未提交文件时,未被被 commit 的文件;
    • 中间显示没有 stage 的修改了的文件,最下面是新的还没有被 Git track 的文件(add)
  2. git status -s 或 git status --short

    状态简览。输入此命令后,有如下几种情况

    • 文件前面有 ?? 标记 新添加的未跟踪(add)
    • 这里写图片描述
    • 第一个左边的 M 表示该文件被修改了并放入了暂存区。
    • 两个MM 该文件被修改了但是还没放入暂存区

2、Diff

  1. git diff

    查看工作区中的修改。

  2. git diff --staged 或 git diff --cached

    查看暂存区中的修改。

  3. git diff <commit id1> <commit id2>

    比较两次 commit 之间的差异。

  4. git diff <branch1> <branch2>

    在两个 branch 之间比较。

  5. git diff 文件

    查看指定文件具体修改了哪些内容。

  6. git show

    查看最后一个 commit 的修改。

  7. git show HEAD~3

    查看倒数第四个 commit 的修改,HEAD~3 就是向前数三个的 commit,即倒数第四个 commit

  8. git show deadbeef

    查看 hash 为 deadbeef 的 commit 的修改。

  9. git blame 文件

    查看谁什么时间改了哪些文件。

三、创建与合并分支

  1. git checkout -b dev

    创建dev分支,然后切换到dev分支

  2. git branch

    查看当前分支,会列出所有分支,当前分支前面会标一个*号。

  3. git checkout dev

    切换回dev分支

  4. git merge dev

    合并指定分支到当前分支

  5. git branch -d dev

    删除dev分支

三、解决冲突

1、使用git pull文件时和本地文件冲突

场景:在使用git pull代码时,经常会碰到有冲突的情况
简要:主要是使用git stash命令分成以下几个步骤进行处理

  1. git stash

    先将本地修改存储起来

  2. git stash list

    可以看到保存的信息, stash@{0}就是刚才保存的标记

  3. git pull

    获取内容

  4. git stash pop stash@{0}

    还原暂存的内容

  5. 系统提示如下类似的信息,系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突

    Auto-merging c/environ.c
    CONFLICT (content): Merge conflict in c/environ.c

  6. 解决文件中冲突的的部分

    这里写图片描述

<<<<<<< Updated upstream 和=====之间的内容就是pull下来的内容
====和stashed changes之间的内容就是本地修改的内容。自行确定需要的内容。解决完成之后,就可以正常的提交了。

2、分支合并产生冲突

分支的快速合并命令:

git merge feature1
  • 新的feature1分支,继续我们的新分支开发 修改readme.txt最后一行,改为:
Creating a new branch is quick AND simple.

在feature1分支上提交:

$ git add readme.txt 
$ git commit -m "AND simple"
[feature1 75a857c] AND simple
 1 file changed, 1 insertion(+), 1 deletion(-)
  • 切换到master分支:
    $ git checkout master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 1 commit.

Git还会自动提示我们当前master分支比远程的master分支要超前1个提交

在master分支上把readme.txt文件的最后一行改为:

Creating a new branch is quick & simple.

在master 分支上提交

$ git add readme.txt 
$ git commit -m "& simple"
[master 400b400] & simple
 1 file changed, 1 insertion(+), 1 deletion(-)

master分支和feature1分支各自都分别有新的提交,

这里写图片描述

这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both modified:      readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

直接查看readme.txt的内容

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:

Creating a new branch is quick and simple.

再次提交

$ git add readme.txt 
$ git commit -m "conflict fixed"
[master 59bc1cb] conflict fixed

这里写图片描述

通过 git log 查看到分支的合并情况,

$ git log --graph --pretty=oneline --abbrev-commit
*   59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...

最后删除feature1分支

$ git branch -d feature1
Deleted branch feature1 (was 75a857c).

四、推送到远程仓库

1、Remote

  1. git remote

    查看已经配置的远程仓库服务器

  2. git ls-remote

    获得远程引用的完整列表

  3. git remote add <shortname> <url>

    添加并关联一个远程库 shortname 一般是 origin,也可以是其他字符串,用来代替整个 url。

  4. git remote rename old_name new_name

    重命名一个远程仓库的简写名。

  5. git remote rm <remote-name>
    移除一个远程仓库。

2、push

  1. git push -u origin master

    关联后,使用该命令第一次推送 master 分支的所有内容,后续再推送的时候就可以省略后面三个参数了,其中参数 u 代表上游(upstream)的意思。

  2. git push origin 远程分支(通常是 master)

    推送时也有可能发生冲突,在他人推送之后是不能立即推送自己的修改的,可能会覆盖他人的工作,所以必须先拉取(pull)别人的修改合并(merge)之后才能推送

  3. git push <remote-name> <commit SHA>:<remote-branch_name>

    push 一部分 commit。例如:git push origin 9790eff:master 即为 push 9790eff 之前的所有 commit 到 master

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值