您的位置:首页 > 运维架构 > 网站架构

Git学习之命令集锦(摘自瘳雪峰的官方网站)

2017-06-13 14:18 162 查看
创建一个根目录用于建造git仓库

1.在仓库目录下,使用 git init 初始化一个仓库

2.使用 git add xxx(文件名) 添加文档到仓库之中,再使用 git commit -m “xxx”(描述)将文档从暂存区提交到仓库。

注:文件必须先置于git 仓库目录下,否则无法找到文件,可同时添加几个文件,再提交。

3. git status :查看仓库当前的运行状态

4.git diff xxx 查看文档与修改前有什么改变,提交修改与提交新文档步骤一致。git add --> git commit

5.git log :查看从近到远的提交日志(git log --pretty=oneline 可简化显示效果)

6.git reset --hard HEAD^(或 commit id)退回到上一版本或根据版本 id 来定位回到某一版本,

git reset 
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用
HEAD
时,表示最新的版本: 
git reset HEAD file.


7.git reflog :记录每一次操作命令,可查找版本号

8.工作区:能看到的目录即工作区,如 learngit文件夹。版本库:隐藏目录 .git 是Git的版本库,

其中包括 stage--暂存区,Git自动创建的分支 -- master,以及指向 master的指针HEAD。修改未提交的文档都保存在stage中,使用 git commit命令后提交到分支。

9.git diff HEAD -- xxx :查看工作区和版本库里面最新版本的区别。第一次修改 -> 
git add
 -> 第二次修改 -> 
git add
 -> 
git commit,每次修改文档后都需要git add到暂存区。


10.git checkout -- file:丢弃工作区的修改,让这个文件回到最近一次
git commit
git add
时的状态

11.rm file :删除工作区的文件  git rm file:删除版本库的文件 git checkout -- file:恢复文件到最新版本(会丢失最近一次提交后你修改的内容

本地库关联远程仓库

1.在 github上创建一个账户,并创建一个仓库 Create repository 

注:添加SSH Key: 在Git Bash 中输入:
ssh-keygen -t rsa -C "youremail@example.com"然后回车即可生成默认的SSH Key,在用户主目录下


2.在本地的仓库目录下输入 git remote add origin git@github.com:Jewhone/learngit.git 命令关联远程仓库,远程库的名字为origin.

3.将本地库的所有内容推送到远程库中:
git push -u origin master,此命令同时将本地master分支与远程分支关联


4.此后如果本地提交后,通过命令:git push origin master 将其推送到远程仓库。

远程库克隆:

1.在github中创建一个新的仓库,勾选底部 Initialize this repository with a README项

2.创建OK后,在本地库使用命令:
git clone git@github.com:Jewhone/gitkills.git克隆远程库


分支管理:用于管理个人工作与整体工作的分开和合并

1.创建分支:git branch name.

2.切换分支:git checkout name.

3.创建并切换分支:git checkout -b name.

4.合并某分支到当前分支:
git merge name --> 在分支上进行修改提交,再合并分支到主分支.


5.删除分支:
git branch -d name.


当主分支和创建分支分别对同一文件进行修改并提交时,将产生冲突

1.git status可以查看冲突,需要对文件进行修改后再重新 git add file,git commit -m ""进行提交

2.使用命令 git log --graph --pretty=oneline --abbrev-commit 查看分支的合并历史

3.删除分支:git branch -d name.

分支管理:

1.git checkout -b dev :创建切换分支 dev

2.git add file --> git commit -m "".在分支提交修改文件

3.切换到 master 分支,准备合并 dev 分支,修改默认的Fast forward模式

4.git merge --no-ff -m "" dev :合并分支并创建一个新的commit

Fast forward模式:删除分支后,会丢掉分支信息  合并分支时,加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并

 Bug分支管理:

1.保存 dev 分支上尚未完成的工作 :git stash

2.确定在哪个分支上修复 bug,如在master上,git checkout master 然后从 master 上创建临时分支 issue-101

3.创建临时分支:git checkout -b issue-101

4.修改 bug 文档,提交修改文档。git add file --> git commit -m " "

5.切换到master分支,合成合并然后删除 issue-101分支:git checkout master --> git merge --no-ff -m " " issue-101

6.切换到 dev 分支: git checkout dev

7.查看工作现场:git stash list

8.恢复工作现场:① git stash apply 恢复 --> git stash drop 删除工作现场 

        ② git stash pop 恢复的同时删除

9.多次 stash 恢复时: 先用 git stash list 查看任务,再使用命令:git stash apply stash@{0}来进行恢复

Feature 分支:(添加新功能)

1.添加一个新功能的时候,最好新建一个 feature 分支,开发完成后合并删除该分支:git checkout -b feature-vulcan

2.开发新功能,添加功能文件 :git add vulcan.py  --> git commit -m "add feature vulcan"

3.切回 dev 分支 git checkout dev

4.由于需要不合并,删除新开发功能分支和文件 :git branch -D feature-vulcan(强行删除)

多人协作:

1.使用 git remote 查看远程库 ,git remote -v 查看远程库详细信息

2.推送分支:git push origin master/dev(分支名)推送到远程库对应的分支上

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

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

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

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

3.抓取分支:在另一台电脑上从远程库clone时,默认情况下只能看到本地的master分支

4.如果要在dev 上进行开发,则必须创建远程origin的dev分支到本地 :git checkout -b origin/dev

5.此时可以在dev上进行修改,并且提交 : git commit -m "add /usr/bin/env“

6.如果多人同时对同一分支做出更改时,需要先指定本地分支与远程分支的链接,git branch --set-upstream dev origin/dev 再将其他人的更改pull到本地,git pull

7.然后在本地合并,解决冲突,再推送。

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

首先,可以试图用
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


  


标签是一个版本的标识(tag):
tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起

 创建标签:

1.切换到需要打标签的分支上,git checkout branchname

2.对该commit ID 打上标签, git tag v1.0

3.查看所有标签,git tag

4.使用 git log --pretty=oneline --abbrev-commit查看commit Id,再使用 git tag v1.0 commitId来对某一commit打上标签

5.查看标签信息: git show v1.0

6.创建带有说明的标签,-a 指定标签名,-m 指定说明文字,git tag -a v0.9 -m "version 0.9 released" f1bbcbd 

7.用 -s 私钥签名一个标签:git tag -s v0.8 -m "version 0.8 released" f1bbcbd 需要先安装 gpg(GnuPG)

操作标签:

1.删除标签,git tag -d v0.9

2.推送标签到远程仓库,git push origin v1.0

3.一次性推送全部尚未推送的标签,git push origin --tags

4.如果已经推送到远程仓库,删除标签,先删除本地,git tag -d v1.0,再删除远程 git push origin :refs/tags/v1.0

创建Git服务器

搭建Git服务器需要准备一台运行Linux的机器
假设你已经有
sudo
权限的用户账号,下面,正式开始安装。
第一步,安装
git

$ sudo apt-get install git

第二步,创建一个
git
用户,用来运行
git
服务:
$ sudo adduser git

第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的
id_rsa.pub
文件,把所有公钥导入到
/home/git/.ssh/authorized_keys
文件里,一行一个。
第四步,初始化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

第五步,禁用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
每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过
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来管理公钥。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: