博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git使用总结
阅读量:5131 次
发布时间:2019-06-13

本文共 5538 字,大约阅读时间需要 18 分钟。

github的应用很广泛,已经成为一个程序员必备的一项技能。不会git管理,基本上不是一个合格的程序员。本文对此作下总结,方便后续查阅

git使用

本文的重点不在此处,这里读者可参考廖雪峰老师的博文。里面对git的原理以及安装使用分析的很到位,并且结合了很多实例用于讲解,是很优秀的文章集锦,此处博主深度安利下。博主只记录下本身遇到的有用的命令供以后查阅

git merge 和 git rebase

都是可以用来合并代码文件的命令。两者合并的概念有所不同。

1.调用方式
git merge

#先切换至被合并的分支$ git checkout master#执行merge命令,让v1来合并当前分支$ git merge v1

git rebase

#即合并v1分支到master分支,且会自动切换至master分支$ git rebase v1 master#也可采取这种方式$ git checkout master $ git rebase v1

2.合并步骤

git merge命令其会比较两个branch的commit节点,然后进行合并,如果有冲突则会产生新的commit节点;
git rebase <upstream-branch-name> <to-branch-name>命令则会执行以下逻辑

1.切换到to-branch分支;2.将to-branch中比upstream-branch多的commit先撤销掉,并将这些commit放在一块临时存储区(.git/rebase);3.将upstream-branch中比to-branch多的commit应用到to-branch上,此刻to-branch和upstream-branch的代码状态一致;4.将存放的临时存储区的commit重新应用到to-branch上;5.结束。        执行完上述第3步后,to-branch的代码状态已经改变,接着执行第4步时则可能会产生合并冲突。

Tips:

  1. git rebase操作即使在产生冲突的时候也不会重新产生新的commit id,而git merge在绝大部分情况下则会产生新的commit id(除非待合并的分支与当前分支是包含关系而不是交叉关系)

  2. git rebase在解决完冲突后,需要执行git rebase --continue才算合并结束。合并后两个branch的commit记录都会保存下来。另外这里也罗列下其他的两个命令方法

    #放弃挂起的patch提交记录,也就是直接应用源branch的提交记录,舍弃本身的提交记录$ git rebase --skip#即撤销rebase操作$ git rebase --abort
  3. git merge默认情况下是使用fast forward方式合并的,其会忽略合并信息,加上--no-ff -m "commit merge"参数则会记录合并操作

git branch 和 git checkout

都是可以用于创建分支的命令。但git checkout的功能比git branch强大,下述以创建分支v1为例

1.分支创建

#切换分支到master$ git checkout master#创建分支v1,但是不会自动切换上下文至v1分支,此处仍为master分支$ git branch v1--------------------------------------------------------------#根据当前分支创建v1分支并且切换上下文至v1$ git checkout -b v1

2.分支与远程关联

如果创建的分支想关联远程仓库的分支,此处假设远程服务器已创建分支v1,则可以使用以下命令

#创建分支v1,并关联远程的v1仓库$ git checkout -b v1 origin/v1

上述操作主要是方便本地v1分支的修改推送到远程上能自动映射,如果使用git branch,则需要进行关联操作才可以git push

$ git branch --set-upstream v1 origin/v1

3.分支删除

#删除v1分支$ git branch -d v1#强制删除v1分支$ git branch -D v1

4.分支查看

#查看本地分支(带*即为当前分支)$ git branch    feature1    master*   v1#查看远程分支$ git branch -r    origin/HEAD --> origin/master    origin/master    origin/v1#查看远本地分支的具体信息$ git branch -v

5.文件操作

git checkout -- <file>还可用于还原指定文件到最近的一次git add或者git commit对应的记录

Tips:分支的创建、删除、合并在git的本地操作是非常快的,所以git很推荐使用分支来处理代码的编写、合并。

git clone 和 git fetch/git pull

三者命令都可以用来下载远程仓库代码。三者调用方式如下

#两种方式下载远程代码,ssh方式和https方式$ git clone git@github.com:jtjsir/GitTest$ git clone https://github.com/jtjsir/GitTest.git#git pull 下载方式$ mkdir GitTest$ git init$ git remote add origin https://github.com/jtjsir/GitTest.git$ git pull origin master#如果当前分支为master,则下述调用方式同上$ git pull#以下方式并不能下载文件$ git fetch origin master
  1. git pull包含了git fetchgit merge

  2. git fetch其会拿取远程库的最新commit id与本地分支指向远程库的commit id进行对比(.git/refs/remote/origin/{branch}),如果不一致,则设置为最新的commit id。而git pull操作在git fetch的基础上进行判断,如果commit id不一致,则会调用git merge拉取线上最新的代码合并至本地

  3. 一般建议使用git clone来初次下载仓库,后续操作采用git pull命令更新仓库

git push

推送本地仓库到远程仓库。语法如下

git push <remote> <localRepo>:<remoteRepo>。这里罗列下其用途

#上传本地master分支到远程origin的master分支$ git push origin master#创建远程分支v1(v1分支在远程服务器尚未存在),执行下述命令刷新github服务器即有v1分支$ git push origin v1:v1#删除远程分支v1$ git push origin :v1

git log

用于查看当前分支的提交情况,常用用法有

#列表形式,所列信息较详细$ git logcommit 03fde2c26e391c5b7732677abf763cc9104251c2Merge: 2f19739 e06bb86Author: jtjsir <**@163.com>Date:   Fri Mar 2 14:55:26 2018 +0800    fix conflictcommit 2f1973967ca0559ebbe3772b2c735e7e39304818Author: jtjsir <**@163.com>Date:   Fri Mar 2 14:52:52 2018 +0800    fix syntax -by mastercommit e06bb8683f2ea69a9fac825c5ccc732c34370f82Author: jtjsir <**@163.com>Date:   Fri Mar 2 14:48:20 2018 +0800    fix syntax error -by branch_feature1commit d0f6c095b99416db7c4a9f45c47e467fd7abaa9dAuthor: jtjsir <**@163.com>Date:   Fri Mar 2 11:11:29 2018 +0800    add comment for java. -by branch_v1  ...#简便列表展示$ git log --pretty=oneline03fde2c26e391c5b7732677abf763cc9104251c2 fix conflict2f1973967ca0559ebbe3772b2c735e7e39304818 fix syntax -by mastere06bb8683f2ea69a9fac825c5ccc732c34370f82 fix syntax error -by branch_feature1d0f6c095b99416db7c4a9f45c47e467fd7abaa9d add comment for java. -by branch_v155f4ebf23d3ec8214c5caf83c13b23441ccf24e8 add php codes7cfa63ed7da74212cd3532a5e4032af08af9ff90 add java codes2dcf842671698a0be0ff41f7d1838195201ecfe2 Initial commit#同上$ git log --oneline03fde2c fix conflict2f19739 fix syntax -by mastere06bb86 fix syntax error -by branch_feature1d0f6c09 add comment for java. -by branch_v155f4ebf add php codes7cfa63e add java codes2dcf842 Initial commit#图形化展示$ git log --graph --oneline --abbrev-commit*   419deae fixed the merge by v1|\  | * d83903d add comment by v2* | 2615020 modify by v1|/  * 43aabae add comment by v1*   03fde2c fix conflict|\  | * e06bb86 fix syntax error -by branch_feature1* | 2f19739 fix syntax -by master|/  * d0f6c09 add comment for java. -by branch_v1* 55f4ebf add php codes* 7cfa63e add java codes* 2dcf842 Initial commit

git stash

缓存当前的工作区间状态。常用于突发情况下的bug修复,缓存当前工作区间方便以后继续解决

#缓存当前分支状态$ git stash#查看当前分支状态列表$ git stash list#恢复最新的分支状态并在list集合中删除$ git stash pop#恢复当前分支的指定状态$ git stash apply stash@{0}

git reset

回滚提交操作,常用命令如下

#回滚到上一个提交$ git reset --hard HEAD^#回滚到上两个版本的提交$ git reset --hard HEAD^^#回滚到上50个版本的提交$ git reset --hard HEAD~50#回滚到指定的版本,根据commit id$ git reset --hard 
#回滚某个文件[add操作后commit操作前]$ git reset HEAD

git diff

git在本地有个这样的逻辑:

#工作区-->暂存区(add操作后存放)-->本地git版本库(commit操作后存放)working directory --> stage area(.git/index文件)--> git repository(.git/refs目录)

比较版本之间的差异或者文件。常用方式如下

#拿工作区和暂存区比较差异$ git diff#拿工作区的整体或者某文件与上一版本比较差异$ git diff HEAD^ 
#拿工作区与指定版本比较差异$ git diff
#拿暂存区与指定版本比较差异$ git diff --cached
#比较两个指定版本的差异$ git diff

总结

好记性不如烂笔头

转载于:https://www.cnblogs.com/question-sky/p/8494444.html

你可能感兴趣的文章
数论四大定理
查看>>
npm 常用指令
查看>>
20几个正则常用正则表达式
查看>>
TextArea中定位光标位置
查看>>
非常棒的Visual Studo调试插件:OzCode 2.0 下载地址
查看>>
判断字符串在字符串中
查看>>
hdu4374One hundred layer (DP+单调队列)
查看>>
类间关系总结
查看>>
properties配置文件读写,追加
查看>>
Linux环境下MySql安装和常见问题的解决
查看>>
lrzsz——一款好用的文件互传工具
查看>>
ZPL语言完成条形码的打印
查看>>
这20件事千万不要对自己做!
查看>>
Linux环境下Redis安装和常见问题的解决
查看>>
玩转小程序之文件读写
查看>>
HashPump用法
查看>>
cuda基础
查看>>
virutalenv一次行安装多个requirements里的文件
查看>>
Vue安装准备工作
查看>>
.NET 母版页 讲解
查看>>