您的位置:首页 > 其它

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

2017-12-07 11:34 316 查看
原博客地址:

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

git init


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

git add 文件


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

git add *


添加所有修改到暂存区

git add .


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

git add -u


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

git add -i


交互式添加文件到暂存区

git add -p


暂存文件的一部分

2、commit

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


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

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


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

. git commit --amend


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

git commit --amend --reset-author


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

git commit -p


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

二、Diff & Status

1、Status

git status


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

工作区就是“干净的”,即没有新的修改

最上面显示的是在 staging area,有未提交文件时,未被被 commit 的文件;

中间显示没有 stage 的修改了的文件,最下面是新的还没有被 Git track 的文件(add)

git status -s 或 git status --short


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

文件前面有 ?? 标记 新添加的未跟踪(add)



第一个左边的 M 表示该文件被修改了并放入了暂存区。

两个MM 该文件被修改了但是还没放入暂存区

2、Diff

git diff


查看工作区中的修改。

git diff --staged 或 git diff --cached


查看暂存区中的修改。

git diff <commit id1> <commit id2>


比较两次 commit 之间的差异。

git diff <branch1> <branch2>


在两个 branch 之间比较。

git diff 文件


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

git show


查看最后一个 commit 的修改。

git show HEAD~3


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

git show deadbeef


查看 hash 为 deadbeef 的 commit 的修改。

git blame 文件


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

三、创建与合并分支

git checkout -b dev


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

git branch


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

git checkout dev


切换回dev分支

git merge dev


合并指定分支到当前分支

git branch -d dev


删除dev分支

三、解决冲突

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

场景:在使用git pull代码时,经常会碰到有冲突的情况

简要:主要是使用git stash命令分成以下几个步骤进行处理

git stash


先将本地修改存储起来

git stash list


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

git pull


获取内容

git stash pop stash@{0}


还原暂存的内容

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

Auto-merging c/environ.c

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


解决文件中冲突的的部分



<<<<<<< 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

git remote


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

git ls-remote


获得远程引用的完整列表

git remote add <shortname> <url>


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

git remote rename old_name new_name


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

git remote rm <remote-name>


移除一个远程仓库。

2、push

git push -u origin master


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

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

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

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


push 一部分 commit。例如:git push origin 9790eff:master 即为 push 9790eff 之前的所有 commit 到 master
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git