[技术探索]Git工作笔记

Git笔记

git安装(windows10 & Ubuntu)

windows10:git-for-windows

#Ubuntu:
 sudo apt-get install aptitude 
 sudo aptitude install git

git配置

  • git config –global user.name “Yourname”
  • git config –global user.email “[email protected]
  • ssh-keygen -t rsa -C “[email protected]” 生成公私钥
  • setting → SSH and GPG keys → New SSH key 实现免密登录

git config的作用域及配置

git config --local  这里的配置只对某个仓库有用
git config --global 对当前用户的所有仓库都有用
git config --system  对系统所有登录用户都有效
###显示config的配置
git config --list --local  
git config --list --global 
git config --list --system 

git和gitlab管理多对私公钥

ssh-keygen -t rsa -C "yxl@yxl" -f ~/.ssh/gitlab_id_rsa

ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/gitlab_id_rsa
//上面两部出错的时候执行以下在执行以上两步
ssh-agent bash

可以通过 ssh-add -D 来清空私钥列表
ssh-add -D可以通过 ssh-add -l 来确私钥列表
ssh-add -l

在 ~/.ssh 目录下新建一个config文件

touch config
# gitlab
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa

# gitlab
Host gitlab.com
    HostName gitlab.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/gitlab_id_rsa
 ssh -T [email protected]

学习网址

廖雪峰Git教程

git基础知识

4个位置

  • 工作区
  • 暂存区
  • 本地仓库
  • 远程仓库

5个状态

  • 未修改(Original)
  • 已修改,未add(未暂存)
  • 已修改,已add(已暂存:git add)
  • 已提交,未推送(git commit)
  • 已推送 (git push)

git基本使用

git add -A  提交所有变化(包括删除了修改过的文件)
git add -u  提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add .  提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add  | . 将文件加入到暂存区
git commit -m "...." 将暂存区的文件添加到本地版本库
git commit - am "...." 等同于上面两步,前提是文件是tracked状态
git commit -m "commnet...."
git mv oldFileName newFileName  git重命名

//提交一个文件之后想重新对这次提交进行撤销合并其他文件重提
//交让两次不同提交变成一次提交(首先要把第二份add一下)
git commit --amend 

查看log

git log 查看本地版本库信息
git log -n2 查看最近两条 commit信息
git log --oneline 以一行显示commit信息
git log -n2 --oneline 上者合并
git log --author="yeqianxun" 按作者查看log
git log --graph  以图形方式显示 
git log --decorate 会显示出tag信息.
git reflog  查看所有commit信息,用于回到未来

代码撤销


//丢掉工作区的修改
git checkout -- 
// 取消上次暂存区的缓存
git reset HEAD file 
// 不删除工作空间改动代码,撤销commit,不撤销git add . 
git reset --soft HEAD
//不删除工作空间改动代码,撤销commit,并且撤销git add . 等价于git reset HEAD~1
git reset  --mixed HEAD ~1
//删除工作空间改动代码,撤销commit,撤销git add .
git reset  --hard HEAD ~1

================

git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态
git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop回复。
git reset --hard HASH #返回到某个节点,不保留修改。
git reset --soft HASH #返回到某个节点。保留修改
 
git clean -df #返回到某个节点
git clean 参数
    -n 显示 将要 删除的 文件 和  目录
    -f 删除 文件
git checkout . && git clean -xdf

代码状态临时保存

git stash 保留工作现场
git statsh apply + stashID 恢复到某个工作场景
git stash drop + stashID 删掉之前保留的工作场景
git stash pop  上述两条命令之和

分支管理

//丢弃一个没有被合并过的分支,可以强行删除。
git branch -D 
//普通的删除分支的方式
git branch -d 
//查看远程分支
git branch -r
//删除远程分支tmp。
git push origin --delete remote_branch
//切换分支
git checkout 
//把dev分支的工作成果合并到master分支上HEAD>>master
git branch -v | git branch -a 常看本地有多少分支
//在本地创建和远程分支对应的分支
git checkout  -b  commitID 基于commitID创建分支并切换分支
//没有远程分支remote_branch,有本地分支local_branch,已经切换到本地分支
git push origin local_branch :remote_branch
//建立本地分支和远程分支的关联
git branch --set-upstream-to=origin/ 

代码合并

//将dev合并到当前分支,合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
//而fast forward合并就看不出来曾经做过合并。merge他会保留每一次提交的历史
git merge dev
//把本地未push的分叉提交历史整理成直线,合并到当前分支;
git rebase 
//将其他分支的部分代码合并到当前分支
git cherry-pick  

远程仓库管理

git push <远程主机名> <本地分支名>  <远程分支名>
//查看远程库的信息
git remote ->origin
git remote -v 
//显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
//origin  [email protected]:yeqianxun/learngit.git (fetch)
//origin  [email protected]:yeqianxun/learngit.git (push)
//上面
//推送本地分支到远程
git push origin 

//要关联一个远程库
git remote add origin git@server-name:path/repo-name.git;
//关联后,第一次推送master分支的所有内容;
git push -u origin master
//每次本地提交后,只要有必要,就可以使用命令推送最新修改;
git push origin master

//同步服务器
git pull

标签管理

//打标签
git tag  默认标签是打在最新提交的commit上
//将标签打在指定的commiID上.PS:标签不是按时间顺序列出,而是按字母排序的
git tag  
//创建带有说明的标签
git tag -a  -m 
//删除标签
git tag -d 
//git show命令可以查看tag的详细信息,包括commit号等。
git show tagName
//推送标签到远程。创建的标签都只存储在本地,不会自动推送到远程
git push origin 
//一次性推送全部尚未推送到远程的本地标签
 git push origin --tags
//删除远程标签
1. git tag -d  删除本地标签
2.git push origin :refs/tags/

git merge,git rebase的区别

  • 提交记录的区别
    merge 保持了修改内容的历史记录,但是历史记录会很复杂;而 rebase 后的历史记录简单,是在原有提交的基础上将差异内容反映进去
  • 撤销合并的不同
    如果使用 merge 进行合并,可以使用 revert 命令对 merge 的内容进行撤销操作,而使用 rebase 则不行,因为已经没有 merge commit 了

参考文章:
https://www.cnblogs.com/ludashi/p/8213550.html

git diff ,git format-patch的应用

format-patch 和diff 的区别:

  • git diff生成的UNIX标准补丁.diff文件
  • git format-patch生成的Git专用.patch 文件

创建patch文件

//commit_ID对应的前n次提交作对比生成patch文件
git format-patch  -n
//两个commitID之间的所有区别
git format-patch  

创建diff文件

//将两个commitID之间的区别生成到指定的diff文件中
git diff      

检查patch/diff文件是否可以直接应用到项目中

git apply --check 
git apply --check 

应用patch

git apply 
git apply 
//自动合入 patch 中不冲突的代码改动,同时保留冲突的部分
 git  apply --reject  

你可能感兴趣的:([技术探索]Git工作笔记)