git 命令集

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

 

2) git config --global core.editor emacs 

 3) git config --list
https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-设置与配置

 

 

 

 

 

 

git常用命令总结--廖雪峰老师Git教程命令总结

2018年03月12日 15:36:57 南国那片枫叶 阅读数:1908 标签: Git廖雪峰常用命令 更多

个人分类: Git

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014734886/article/details/79527710

学习了廖雪峰老师的Git教程之后的命令总结,重点更新第十项关于git和远程仓库的东西。

如果没有学过,这是传送门

下面这个图很重要

 

​​一、git初始化本地仓库和配置

echo "想输入到文件的内容,一般为# 库名字" >> README.md

git init

如果没有配置需要配置

git config --list

git config --global user.email "zhoudu@neotel.com.cn"

git config --global user.name "周渡"

git config --list

还可以配置git显示颜色

git config --global color.ui true

配置别名

git config --global alias.st status 使用git st 代替 git status

git config --global alias.co checkout 使用git co 代替 git checkout git config --global alias.ci commit 使用git ci 代替 git commit git config --global alias.br branch 使用git br 代替 git branch

有人丧心病狂地把lg配置成了:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

 

二、提交文件

git status

git diff file_name git add file2.txt file3.txt 想添加所有的文件git add .

git status

git commit -m "提交记录文字“

git status

举例:

git commit -m "Fixes bug"

如果发现commit信息写错了,

git commit --amend -m "Fixes bug #42"

 

 

三、回退

 

 

1,查看commit信息和命令信息

git log(查看当前状态下的commit信息,不能查看以后的信息)

git reflog(查看所有的命令信息)

git reflog

git log -p --graph

git log --graph 看到分支合并图

git log --graph --pretty=oneline --abbrev-commit

2,回退

git reset --hard commit_id。除了--hard参数外,还有--soft,--mixed。

add表示add操作之后的结果

commit表示commit之后的结果

push:表示进行push操作之后的结果

(stash)表示在add前可能存在stash操作(即暂存工作区的操作)

假设某次提交过程如下

init--(stash1)--add1--commit1--push1--(stash2)--add2--commit2--push2--(stash3)--add3--commit3--push3

举例

--hard 回退到某个版本commit之前的状态 ,进行1,2,3操作。如现在在commit2,或者add2,可以回到commit3或者commit1

--soft 回退到某次commit前的stage状态(即处于暂存状态),进行1操作。如现在在commit2,可以回到add1,或者add3

--mixed回退到add前的状态(即处于工作区,如果有stash,需通过stash pop之后才能真的回到暂存的状态),执行1,2操作。如现在在commit2,可以回退到init--(stash1),或者commit1-push1--(stash2),或者

 

3,HEAD介绍

HEAD指向的版本就是当前版本,HEAD^,前一个版本,HEAD^^前两个,HEAD~100,前100个版本

 

4,查看远程log

git fetch --all 可以把远程的commit信息拉到本地更新到本部版本库的master HEAD指针上,然后利用git log和git reflog进行查看操作

 

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

 

四、切换暂存区、工作区

git diff HEAD -- readme.txt 查看工作区和版本库里面最新版本的区别

git checkout -- readme.txt 把工作区的修改全部撤销,其中--不能省,否则就变成切换分支了。

git reset HEAD file_name 可以把暂存区的修改撤销掉(unstage),重新放回工作区

 

五、删除文件

git rm file_name

git commit -m "删除信息“

误删

git checkout -- test.txt 用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

 

六、分支

1,查看本地分支,带星号的表示当前所在本地分支

git branch

查看远程和本地分支

git branch -a

如果没有成功,先git fetch origin,然后我们在git branch -a

2,创建分支

git branch dev 创建分支

git checkout dev 切换分支(不要随意切分支,如果你在某个分支上面修改了一些东西,但没有stash,那么你切换分支后修改的东西就没有任何保存了,如果想切,请先git stash,然后git checkout dev)

stash后没有stash pop,然后reset --hard

 

git checkout -b dev 创建并切换分支

3,创建远程分支

 如果想把本地的test分支提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支。

git push origin test:master         // 提交本地test分支作为远程的master分支

git push origin test:test              // 提交本地test分支作为远程的test分支

也可以在github网站直接创建

直接在红色框位置输入想要创建的分支的名字,然后enter即可。

 

4,合并分支

git merge dev 合并当前分支,一般先切换到需要被合并的分支,如切换到master

git merge --no-ff -m "merge with no-ff" dev --no-ff参数,表示禁用Fast forward,用普通模式合并,合并后的历史有分支,能看出来曾经做过合并。

merge和rebase的区别https://blog.csdn.net/wh_19910525/article/details/7554489

git merge b # 将b分支合并到当前分支

git rebase b,也是把 b分支合并到当前分支

假设目前分支:

5,合并远程分支

假设这两个分支是a和b,那么fetch a和b,checkout a,将b merge(rebase)到a,push a到远端。这样做,将b和a合到了一起,并且更新了本地和远端的a。如果b不需要了,可以删除远程b和本地b

6,git fetch 更新远程代码到本地仓库

https://www.cnblogs.com/chenlogin/p/6592228.html

理解 fetch 的关键, 是理解 FETCH_HEAD,FETCH_HEAD指的是: 某个branch在服务器上的最新状态

当前分支指向的FETCH_HEAD, 就是这个文件第一行对应的那个分支.

一般来说, 存在两种情况:

1)如果没有显式的指定远程分支, 则远程分支的master将作为默认的FETCH_HEAD.

2)如果指定了远程分支, 就将这个远程分支作为FETCH_HEAD.

命令1:git fetch origin branch1

设定当前分支的 FETCH_HEAD' 为远程服务器的branch1分支`。这个操作是git pull origin branch1的第一步, 而对应的pull操作,并不会在本地创建新的branch。

同时这个命令还可以用来测试远程主机的远程分支branch1是否存在, 如果存在, 返回0, 如果不存在, 返回128, 抛出一个异常.

命令2:git fetch origin branch1:branch2

使用远程branch1分支在本地创建branch2(但不会切换到该分支),如果本地不存在branch2分支, 则会自动创建一个新的branch2分支,

如果本地存在branch2分支, 并且是`fast forward', 则自动合并两个分支, 否则, 会阻止以上操作.

7,fetch更新本地仓库两种方式

//方法一

git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master

git log -p master.. origin/master //比较本地的仓库和远程参考的区别

git merge origin/master //把远程下载下来的代码合并到本地仓库,远程的和本地的合并

 

//方法二

git fetch origin master:temp //从远程的origin仓库的master分支下载到本地并新建一个分支temp

git diff temp //比较master分支和temp分支的不同

git merge temp //合并temp分支到master分支

git branch -d temp //删除temp

 

8,删除分支

git branch -d dev 删除分支

 

9,删除远程分支

git push origin --delete dev

 

 

七、分支策略

1,在实际开发中,我们应该按照几个基本原则进行分支管理:

1),master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

2),干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

3),每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了

2,分支是否推送到远程

1),master分支是主分支,因此要时刻与远程同步;

2),dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

3),bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

4),feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

 

八、bug分支和暂存工作现场

1,bug分支的用途

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成又不想commit时,先把工作现场暂存,然后去修复bug,修复后,再git stash pop,回到工作现场。

 

2,创建bug分支的流程

假设暂存现场在dev分支,总体流程如下:

git stash

去修bug

git checkout dev

git stash list 会出现stash@{0}: WIP on dev: 6224937 add mergegit

git stash pop 还可以通过 git stash apply stash@{0}进行恢复,再删除stask内容git stash drop

git stash list

 

九、feature分支

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,用git branch -D <name>强行删除

 

十、github远程仓库

1,使用ssh创建key

为了和远程库相关联需要添加key,如果不加好像每次需要输密码:

ssh-keygen -t rsa -C "zhoudu@neotel.com.cn" # 后面的邮箱根据自己的情况修改

该命令用于 创建id_rsa文件和id_rsa.pub文件,id_rsa是私钥,id_rsa.pub是公钥用于添加到github的ssh key里面。文件位于用户目录下的.ssh文件里面

2,本地仓库和远程仓库关联

第一种情况:远程只有仓库没有内容时,将本地已经写好的代码关联到远程:

git remote add origin git@github.com:JasonDu1993/learngit.git 关联远程库

git push -u origin master -u只在第一次推送分支时使用

git push origin master

git push origin dev

一般master分支和dev分支都会推到远程

 

第二种情况:远程仓库有内容,直接克隆到本地

git clone git@github.com:JasonDu1993/gitskills.git

git branch

git checkout -b dev origin/dev

git add file_name

git commit -m "记录提交信息"

git push origin dev

在GitHub上,可以任意Fork开源仓库;

自己拥有Fork后的仓库的读写权限;

可以推送pull request给官方仓库来贡献代码。

 

3,关联仓库出现问题解决办法

1)如果git checkout -b dev origin/dev迁出分支出现问题

fatal: Cannot update paths and switch to branch 'dev' at the same time.

Did you intend to checkout 'orgin/dev' which can not be resolved as commit?

解决办法是先git fetch,再git checkout -b dev origin/dev

 

2)如果git push失败,先git pull

如果git pull失败,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:

git branch --set-upstream dev origin/dev,(现在好像改成git branch --set-upstream-to=origin/master master)

然后在git pull,git push origin master

 

3)https://blog.csdn.net/love_rongrong/article/details/12557347

git error: RPC failed; result=22, HTTP code = 411

解决办法:改一下git的传输字节限制

git config http.postBuffer  524288000

 

4)error: RPC failed; result=22, HTTP code = 413

fatal: The remote end hung up unexpectedly

fatal: The remote end hung up unexpectedly

Everything up-to-date

这两个错误看上去相似,一个是411,一个是413

下面这个错误添加一下密钥就可以了

首先ssh-keygen -t rsa -C "zhoudu@neotel.com.cn"生成密钥

 

4,有时候不想解决冲突

1),从远处拉取最新的东西到本地(不想解决冲突直接接受远程仓库内容)

git fetch --all //至少下载到本地不进行合并

git reset --hard origin/dev

git pull

2),将本地更新强制推到远程,不想解决和远程的冲突

git push --force origin dev 或者git push -f origin dev

 

5,删除远程分支

git push origin --delete dev

删除本地分支

git branch -d dev

6,创建远程分支

 如果想把本地的test分支提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支。

git push origin test:master         // 提交本地test分支作为远程的master分支

git push origin test:test              // 提交本地test分支作为远程的test分支

7,查看远程分支commit信息用于回退到远程分支的某个版本

git fetch

git log

git reset --hard commit_id

 

8,修改远程仓库名称

1) 在本地仓库删除远程仓库:

git remote rm origin 1

2 )修改Github仓库名称: 

在Github页面中,进入要修改的仓库,在页面上方选择“Settings”,即可重命名远程仓库。

3) 添加新的远程仓库:

git remote add origin https://github.com/JasonDu1993/gitskill.git

 

 

十一、多人合作流程

因此,多人协作的工作模式通常是这样:

首先,可以试图用git push origin branch-name推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

 

十二、版本标签

标签用于发布版本时使用,相当于给某次commit取个名字

1,添加标签

git tag <name> 用于新建一个标签一般取名name为v0.1等,默认为HEAD,也可以指定一个commit id

git tag -a <tagname> -m "blablabla..." 可以指定标签信息

git tag 可以查看所有标签

 

2,删除标签

git tag -d <tagname> 删除一个本地标签

git push origin :refs/tags/<tagname> 删除一个远程标签

git push origin <tagname> 推送一个本地标签

git push origin --tags 推送全部未推送过的本地标签

 

十三,忽略特特殊文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件,同时提交这个文件到Git。

 

例子如下,.gitignore文件内容如下:

# Windows:

Thumbs.db

ehthumbs.db

Desktop.ini

 

# Python:

*.py[cod]

*.so

*.egg

*.egg-info

dist

build

 

# My configurations:

db.ini

deploy_key_rsa

 

忽略文件的原则是:

1,忽略操作系统自动生成的文件,比如缩略图等;

2,忽略编译生成的中间文件、可执行文件等,比如Java编译产生的.class文件;

3,忽略敏感信息的配置文件,比如存放口令的配置文件。

 

十四、自定义Git服务器

假设你已经有sudo权限的用户账号并且该教程是在ubuntu下介绍的

1,安装git:

sudo apt-get install git

2,创建一个git用户,用来运行git服务:

sudo adduser git

3,创建证书登录:

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

4,初始化Git仓库:

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

sudo chown -R git:git sample.git

5,禁用shell登录:

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

6,克隆远程仓库:

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

git clone git@server:/srv/sample.git

 

Cloning into 'sample'...

warning: You appear to have cloned an empty repository.

 

管理公钥

如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。

管理权限

使用Gitolite就是这个工具管理权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值