Git常用命令

Git基础命令

Command line instructions

首先在git上创建工程

Git global setup

git config --global user.name "dushaochong"
git config --global user.email "dushaochong@analysys.com.cn"

Create a new repository

本地创建空的仓库并添加README文件,本地默认创建一个空EGMonitor_SDK文件夹
git clone git@git.analysys.cn:MobileProjectiOS/EGMonitor_SDK.git
cd EGMonitor_SDK
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

Existing folder or Git repository

在空仓库中添加工程文件并push到git仓库
cd existing_folder
git init
git remote add origin git@git.analysys.cn:MobileProjectiOS/EGMonitor_SDK.git
git add .
git commit -m "新工程添加"
git push -u origin master

克隆git现有仓库

命令:git clone [url]
运行后首次需要输入用户名及密码,即可克隆到本地
如:
git clone http://git.analysys.cn/MobileProjectiOS/EGMonitor_SDK.git
或
git clone http://git.analysys.cn/MobileProjectiOS/EGMonitor_SDK.git NewCatalogueName

git分支

############## git branch 操作 ############## 
git branch ##  查看当前用户所处的分支
git branch -v  ##  查看各个分支最后一个提交对象的信息
git branch dev1.0  ##   创建分支dev1.0
git branch --edit-description 分支名称 ## 添加分支描述信息或查看分支描述信息
git branch --set-upstream-to=origin/dev1.0 dev1.0  ##  一般多人操作同一个工程时,创建分支完成后,都会对分支进行跟踪操作,或提交时跟踪
git branch -r ##  列出远程分支
git branch -a ##  列出本地和远程分支;若要看到最新提交的分支,则需要进行pull一下,之后再查看;之后便可使用checkout命令切换分支到本地
git branch -m | -M oldBranch newBranch ##  重命名分支,如果newBranch名字以存在,则需使用-M强制命名;否则使用-m重命名

**删除远程分支**
git branch -r -d origin/branch-name  ## 删除branchName分支 不能再当前分支下删除,需要切换到别的分支
git push origin :branch-name  ## 一定记得push
git remote update origin --prune ## 如果A电脑删除了分支dev,B电脑以前使用过,则B电脑需要先更新远程分支,然后把本地无效分支删掉

############## git checkout 操作 ############## 
git checkout -b dev1.0  ##  创建分支dev1.0并切换到dev1.0分支,此命令相当于:① git branch iss53 ② git checkout iss53
git checkout dev1.0  ##  若分支不存在,则新建分支dev1.0;若存在则切换分支到dev1.0
**跟踪远程分支**
git checkout --track origin/serverfix
git checkout -b localname origin/serverfix

############## git push 操作 ############## 
git push --set-upstream origin dev1.0  ##  切换分支首次提交,以后可直接使用git push
git push [远程名] [本地分支]:[远程分支]
git push origin dev:dev  ##  将本地分支push到远程分支
git push 分支名 --delete <branchName>  ##  删除远程分支。先删除本地分支,然后:git push origin :test 将本地分支推送到远程
git push origin --delete tag <tagname>  ##  删除远程tag。先删除本地tag,然后:git push origin :test 将本地tag推送到远程
git push -u origin dev -f  ## 强制提交dev分支

############## git pull 操作 ############## 
git pull  ##  同步项目。有时回报错需要提交新更改或删除更改(git stash)\
git pull -t ## 同步远程tag信息

############## git merge 操作 ############## 
## merge hotfix分支已修改并提交本地完成,且master分支都已推送到远程服务器
git checkout master  ##  切换到主分支
git merge hotfix  ##  merge分支名称
git branch -d hotfix  ##  删除botfix分支
git branch --merged  ##  查看哪些分支已被并入当前分支
git branch –no-merged ##  未被并入当前分支

git fetch origin  ##  同步远程服务器上的数据到本地

[Git合并指定commit到当前分支]([https://www.jianshu.com/p/3d3275e0035c])

############## git remote 操作 ############## 
git remote show origin  ##  查看remote地址,远程分支,还有本地分支与之相对应关系等信息
git remote prune origin  ##  删除远程仓库不存在的分支

############## 分支重命名 ############## 
a. 重命名远程分支对应的本地分支
git branch -m old-local-branch-name new-local-branch-name
b. 删除远程分支
git push origin  :old-local-branch-name
c. 上传新命名的本地分支
git push origin  new-local-branch-name

记录每次更新到仓库

**检查当前文件状态**
git status  ##  列出当前git管理下文件的修改、变化情况

**跟踪新文件**
git add README.md  ## 跟踪后可用git status查看状态

**忽略某些文件**
cat .gitignore *.[oa] *~  ##  忽略所有以 .o 或 .a 结尾的文件、忽略所有以波浪符(~
)结尾的文件

**列出已修改文件**
git diff
**查看已暂存和未暂存的更新**
git diff --staged 
或
git diff --cached

**提交更新**
git commit  ## 确保所有文件都已git add,可在首行空行中添加提交注释信息
或
git commit -m "提交注释信息"

**跳过使用暂存区域**
git commit -a -m 'added new benchmarks'  ##  跳过 git add步骤

**移除文件**
git rm grit.gemspec  ##  删除已跟踪文件,即使用git add 添加的文件。需先使用rm 命令在当前目录下删除后,再执行此命令

把文件从 Git 仓库中删除(亦即从暂存区域移除),但保留在当前工作目录中
git rm --cached readme.txt

**修改文件名称**
git mv README.txt README  ##  修改被跟踪文件的名称

查看提交历史

git log  ##  查看所有修改历史
git log -p -2  ##  -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
**将每个提交放在一行显示**
git log --stat  ##  显示简要的增改行数统计
git log --pretty=oneline
git log --pretty=format:"%h - %an, %ar : %s"  ##  定制日志显示格式
git log --pretty=format:"%h %s" --graph  ##  展示每个提交所在的分支及其分化衍合情况
git log --since=2.weeks  ##  最近两周内的提交
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
   --before="2008-11-01" --no-merges -- t/  ##  查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试脚本(位于项目的 t/ 目录下的文件)
git log --grep 文件提交  ##  过滤提交中含有“文件提交”的日志

版本回退

git log --pretty=oneline  ## 查看提交日志版本号
git reset --hard HEAD^  ## 回退到上一个版本号
git reset --hard HEAD~100  ## 回退到上100个版本号
git reset --hard 3628164  ## 指定回退到某个版本。3628164为git log --pretty=oneline查出的版本号

撤消操作

**修改最后一次提交**
git commit --amend  ##  提交完了才发现漏掉了几个文件没有加,或者提交信息写错了,撤销操作
**取消已经暂存的文件**
git reset HEAD test.md ##  不小心使用git add . 添加到缓存区后,取消文件test.md文件
**取消对文件的修改**
git checkout -- README.md

fork源代码同步

# 1. 配置远程仓库地址
git remote -v 查看是否有远程仓库
//  git remote add [shortname] [url] // shortname 别名
git remote add upstream http://git.xxx.cn/xxx/xxx.git

// git remote rename oldname newname  重命名远程仓库名称
// git remote rm upstream 移除已配置远程仓库

# 2. 拉取远程仓库最新代码
git fetch [shortname]
git fetch [shortname] [branch]
git fetch --tags

# 3. 切换到本地分支
git checkout [branch]

# 4. 提交本地仓库新代码
git add .
git commit -m "备注"

# 5. 拉取远程分支最新代码
git fetch [shortname] [branch]

# 6. 指定远程仓库分支代码合并至本地当前所在分支
git merge [shortname]/[branch]

# 7. 若有冲突需解决冲突
git status
再次
git add .
git commit -m "注释"
git status
git log -5

# 8. 将代码推到fork下的远程版本库
## 若为master权限必须使用以下方式,非master可以直接push,防止直接push后合并到远程分支
git push origin [本地branch]:[远程branch]

# 9. 网页端提交New pull request

# 10. 主库账号下Merge pull request

gitlab与github代码迁移

直接修改远程仓库地址,此种方式会将原有工程分支、提交记录等都覆盖,而使用新提交的工程信息

git remote set-url origin https://xxx.com/openSource.git
git push

打标签

**列显已有的标签**
git tag
git tag -l 'v1.4.2.*' ##  列出1.4.2 系列的版本
**新建标签**
git tag -a v1.4 -m 'my version 1.4'
git show v1.4  ##  git show  查看某次提交的修改内容
**补打标签**
$ git tag -a v0.1.1 9fbc3d0 ##(通过提交标识打
tag)
**删除标签**
git tag -d v0.1 ## 删除本地标签
git push origin :v0.1 ## 删除远程tag
**分享标签**
git push origin v1.5  ##  显式命令才能分享标签到远端仓库
git push origin --tags  ##  推送所有本地新增的标签上去

遇到问题

1、最近由于过年长时间未操作gitlab,导致更新提交报错,报错如下:

! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'http://git.***.cn/**/document'

此原因可能是gitlab长时间不操作,主动对分支进行了保护,可以登录git,依次找到project->setting->protected branch,进行解锁即可。如下图:

Paste_Image.png
Paste_Image.png

2、提交代码时终端闪退,重新打开命令行再次提交时,报错如下:

fatal: Unable to create '/Users/**/Desktop/GitLab/**/.git/index.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
analysys-C:EGMonitor-Swift analysys$ git commit
fatal: Unable to create '/Users/**/Desktop/GitLab/**-Swift/.git/index.lock': File exists.

解决方法:

到项目git目录下执行以下语句后,重新git add .
rm -f ./.git/index.lock

3、git push 权限不允许 (MAC)

感谢这位大哥的文章: 寒潇

这是一个坑爹的问题,在网上搜了N多个基本都不行,主要是由于多账号问题导致,当push时git使用原有已保存的git账号。报错信息:

remote: Permission to xxx/ccccc.git denied to xxx.
fatal: unable to access 'https://github.com/xxx/ccccc.git/': The requested URL returned error: 403

解决方法一:

找到钥匙串访问 -> 密码 -> 搜索 github.com 的密码,右击某条数据,显示简介 -> 属性 -> 显示密码 可查看账户密码。找到报错的账户删除即可,若账户较多可以试着挨个删除,然后测试 git push 操作,若push时显示输入用户名密码,则重新输入后可push成功。

$ git push -u origin master
Username for 'https://github.com': git账号
Password for 'https://xxx@xxx.com.cn@github.com': git密码

解决方法二:
针对单个git项目

1. clone git项目时使用https方式,如下图1
2. 找到项目下隐藏文件夹.git中config文件,如下图2(隐藏文件显示:shift+cmmand+. )
3. 在 [remote "origin"] 中的 url项,添加push时的账号及密码以及项目地址,如下图3
格式:https://xxx%40xxx:密码@git地址
如:url = https://zhangsan%40163.com:mima123@github.com/aaa/aaa.git

注:%40 为@符号(账号或密码中包含@符号都需要替换)
4. 测试 git push
图1
图2
图3

4、生成SSH keys时找不到对应文件

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

但在 open ~/.ssh/ 目录下未见文件生成,默认生成在当前执行命令的目录下

解决办法:
到ssh目录下执行命令:

$ cd ~/.ssh/
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

5、添加ssh keys

$ git config user.name  ## 查看当前配置用户
$ git config user.email ## 查看当前用户配置邮箱
$ cd ~/.ssh/
$ ssh-keygen -t rsa -b 4096 -C "user.email" ## 生成ssh
然后添加至git SSH keys 中
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 配置 首先是配置帐号信息 ssh -T git@github.com#登陆github 修改项目中的个人信息 1 ...
    rochuan阅读 648评论 1 1
  • 一、 Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git c...
    LOVE_晴天阅读 2,305评论 0 10
  • 接上一篇昨天整理的《产品和运营视角的数据化运营体系(思维导图整理)》一文,本篇整理的思维导图也来自公众号 秦路 最...
    米拉之落阅读 428评论 0 3
  • 无故诋毁谩骂的人,网络给了一个很准确的形容词-喷子。他们成群结队,声势浩大。速度之快令人结舌。所到之处,满是苍夷。...
    好酒季白阅读 638评论 0 0
  • 我在一些网站和评论里看到过许多人讲述自己的痛苦,在遭受伤害后他们不相信爱,甚至认为自己不被爱?!那你不妨冷静下来...
    伤迟慕阅读 546评论 0 1