共计 4958 个字符,预计需要花费 13 分钟才能阅读完成。
git 是分布式代码管理工具,越来越多的企业使用它。所以掌握 git 的使用至关重要。它的远端管理是基于 ssh,所以在使用远端 git 的时候需要进行 ssh 配置。ssh 是一种免密登录,使用的 rsa 非对称加密来进行服务器认证;
一、git 的 ssh 配置如下
首先你需要拥有 gitlab 或是 github 的一套账号,然后设置 git 的 user name 和 user email:
1、全局配置账号
# git 全局设置账号
git config –global user.name “your name”
git config –global user.email “your e-mail”
2、根据 user name 和 user email 生成自己的 ssh 密钥
cd $USER
cd .ssh #如果存在,需要备份可以备份下,如果不需要可以直接覆盖
ssh-keygen -t rsa -C “your e-mail” #生成 ssh
执行结果:
最终得到 id_rsa 和 id_rsa.pub
3、gitlab 上面添加 ssh 密钥,使用文件 id_rsa.pub。
打开 https://gitlab.company.com/,使用自己账号登录,然后添加 ssh 密钥;主页头像 -> profile -> SSH Keys -> Add key
将 id_rsa.pub 文件中的内容添加上去,然后点击 Add key;
4、测试 ssh 链接 gitlab.company.com
ssh git@gitlab.company.com
# 会出现如下提示,说明链接成功
The authenticity of host ‘gitlab.company.com (100.98.137.229)’ can’t be established.
RSA key fingerprint is SHA256:WiQ1s8RKGjQpO0ICFY3NV2Hs0axwIbrv6j6q0XJsdsc.
RSA key fingerprint is MD5:6c:8d:0f:09:31:c9:08:9b:67:48:09:7c:d9:46:65:3e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘gitlab.company.com,100.98.137.229’ (RSA) to the list of known hosts.
PTY allocation request failed on channel 0
Welcome to GitLab, your name!
Connection to gitlab.company.com closed.
二、git 的简单使用
创建一个新的仓库
git clone git@gitlab.company.com:yaoname/my-test-git-project.git
cd my-test-git-project
touch README.md
git add README.md
git commit -m “add README”
git push -u origin master
touch .gitignore
vi .gitignore #编辑
git add .gitignore
git commit -m “add .gitignore”
git push -u origin master
本地仓库和远端仓库建立连接
cd existing_folder
git init
git remote add origin git@gitlab.company.com:yourname/my-test-git-project.git
git add .
git commit
git push -u origin master
git 基本操作讲解
The most commonly used git commands are:
add Add file contents to the index
bisect Find by binary search the change that introduced a bug
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
clone Clone a repository into a new directory
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
fetch Download objects and refs from another repository
grep Print lines matching a pattern
init Create an empty Git repository or reinitialize an existing one
log Show commit logs
merge Join two or more development histories together
mv Move or rename a file, a directory, or a symlink
pull Fetch from and merge with another repository or a local branch
push Update remote refs along with associated objects
rebase Forward-port local commits to the updated upstream head
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
show Show various types of objects
status Show the working tree status
tag Create, list, delete or verify a tag object signed with GPG
1、git 仓库初始化
git init
2、git 生成快照并且存入项目索引
git add . #或 git add * 提交所有文件
git add README.md #提交指定文件
git add folder/ #提交某个文件夹下面的所有文件
3、git 将项目多索引提交到本地仓库的当前分支下
git commit -m ‘ 注解 ’
4、git 将远端仓库信息更新到本地,并且 merge 到本地分支
git pull origin master
5、git 推送当前分支到远端分支
git push origin master
6、git 将远端仓库信息更新到本地,不合并到本地分支
git fetch
7、git 创建分支操作
git branch -a #查看所有分支
git branch –list #查看本地分支
git branch feature/20181017.business.chao #创建分支
git checkout feature/20181017.business.chao #切换分支
#或直接创建并且切换
git checkout -b feature/20181017.business01.chao
git push origin feature/20181017.business01.chao #推送到远端
git pull origin feature/20181017.business01.chao #从远端拉取
# 删除
git branch -d/-D feature/20181017.business01.chao #删除本地
git push origin –delete feature/20181017.business01.chao #删除远端分
8、git 查看当前分支的状态
git status
9、git merge 合并分支
#当前分支 git checkout feature/20181017.business01.chao
touch 1.txt
vi 1.txt # 编辑内容然后提交到远端
git checkout git checkout feature/20181017.business.chao
git merge feature/20181017.business01.chao #合并本地分支
10、git grep 查找当前分支文件中的内容
git grep –text “test” #使用 git grep -h 查看更多用法
11、git diff 比较分支
git diff master #比较两个分支的不同
12、git log 查看 commit 记录
git log -n 10 #查看最近 10 条提交记录
13、git rm 删除文件以及索引
touch 2.txt
git add 2.txt
git commit -m ‘add 2.txt’
git rm 2.txt #删除已经提交到本地仓库的文件
14、git tag 一般用来管理【里程碑】
git checkout master
git tag –list #查看所有标签
git tag v1.0 #添加 tag
git tag –list ‘v1.*’ # 列出 version 为 1 的所有子版本
15、git show 获取项目的详细信息
git show #展示项目的各种类型
commit eaa7f945204bed8f2b01d284d99fcf0b3ac3029e
Author: chao <chao@yourcompany.com>
Date: Wed Oct 17 06:16:26 2018 +0000
add README
diff –git a/README.md b/README.md
new file mode 100644
index 0000000..7088fed
— /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+
+# this is repositry
16、git rebase 重置当前的操作 options, 写的不错 rebase 详解
git rebase branchName #消除本分支下面的 commit
git rebase –continue #在 rebase 的过程中,也许会出现冲突 (conflict). 在这种情况,Git 会停止 rebase 并会让你去解决 冲突;在解决完冲突后,用 ”git-add” 命令去更新这些内容的索引 (index), 然后,你无需执行 git-commit, 只要执行
git rebase –abort #在任何时候,你可以用 –abort 参数来终止 rebase 的行动,并且 ”mywork” 分支会回到 rebase 开始前的状态
17、git stash 储藏(临时保存到 git 栈中,独立于 git 分支管理之外。那个分支使用恢复到哪个分支就行了)
#储藏使用名称和不使用名称保存未提交到仓库的(暂存和非暂存)
git stash
git stash save “stash-name-1”
#变更统计
git stash show
#每次储藏
git stash list
#恢复到 git 版本管理中
git stash pop #弹出栈
#通过名字使用储藏
git stash apply
#删除
git stash drop
#清空
git stash clear
#直接使用 stash 创建分支
git stash branch testbranch
18、git revert 向前滚动的方式回滚,不会丢失源代码
git revert commit_id
19、git reset 使用 HEAD 的状态的方式回滚,会丢失源代码
git reset –hard HEAD^ #回退到上个版本
git reset –hard HEAD~3 #回退到前 3 次提交之前,以此类推,回退到 n 次提交之前
git reset –hard commit_id #退到 / 进到 指定 commit 的 sha 码
git push origin HEAD –force #强推到远端, 使用 git push 推送推送失败
20、git bisect 通过二进制搜索找到引入错误的更改
git bisect start #开启查找
git bisect good v2.6.18
git bisect bad master #查找报错的版本
21、删除并忽略已经加入到 git 仓库的文件
#查找到对应的文件
find . -name .DS_Store -print0 | xargs -0 git rm -f –ignore-unmatch
#加入 git 忽略
echo .DS_Store >> ~/.gitignore
#add
git add –all
#提交忽略
git commit -m ‘.DS_Store banished!’