git 常用操作

1 git diff
git @@ -2,3 +2,4 @@
•-开头的行,只出现在源文件中的行
•+开头的行,只出现在目标文件中的行
•空格开头的行,是源文件和目标文件中都出现的行
•差异按照差异小结进行组织,每个差异小结的第一行都是定位语句,由@@开头,@@结尾。

-2,3 +2,4
在源文件( a/LICENSE)第二行开始的三行, 和目标文件(b/LICENSE)第二行开始的四行不同。 
2 版本库
2.1 基本目录
(1)工作区
	在电脑里能看到的目录, learngit文件夹就是一个工作区
(2)版本库(repository)
	工作区有一个隐藏目录.git(不是工作区),是Git的版本库。
	Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD。
(3)暂存区(staging area)
	暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。

在这里插入图片描述

2.2 添加文件到Git仓库
1.使用命令git add <file>		-->git add负责把修改提交到暂存区 	
2.使用命令git commit -m <message>  	-->git commit只负责把暂存区的修改提交到
3.提交后,用git diff HEAD -- 命令可以查看工作区和版本库里面最新版本的区别
2.3 常用操作
git checkout -- <file>... to discard changes in working directory
git reset HEAD <file> 负责把暂存区(stage)<file>重新放到工作区
git reset HEAD	 负责把暂存区(stage)中所有文件重新放到工作区
git reset --hard <commit number> 回退到相应的commit,之前的修改全部丢失(慎用)

git log可以查看提交历史,以便确定要回退到哪个版本。
git reflog查看命令历史,以便确定要回到未来的哪个版本。

2.4 git revert
reset是回朔到指定的commit版本,指定的commit版本之后的操作commit都重置了.
revert是删除指定的commit操作的内容,指定的commit之前和之后commit操作都不受影响,与此同时这个操作也会作为一个commit进行提交.

当前的commit如下
在这里插入图片描述
(1)reset和revert用法比较
在这里插入图片描述
reset: 当前commit为HEAD,然后每一个commit加一得到要撤销的commit 为HEAD~4.

revert: git revert + 完整的commit或者该commit前7位即可

git revert d672cd988198d3aec6faaccf0e39ab38e2304d19 或者 git revert d672cd9

得到结果如下
在这里插入图片描述

(2) 连续取消几个commit id
例如取消最新的三个commit:HEAD 1-3

git revert X...Y
用法: X...Y 代表一个左开右闭区间(X,Y],不包括X,包括Y. 其中Y为起点commit,X为终点commit的下一个commit

方式一:

bash-3.2$:git revert HEAD~3...HEAD

方式二:

git revert 6a2cc3d...6a43ed0
git revert 6a2cc3dd8385004a5b9145630cb0b67498155c6b...6a43ed02f5831c9b91df9ae0dbfb9561d1ec2bb2

在这里插入图片描述

3 分支操作
3.1 常用操作命令
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
3.2 解决冲突
cdlab@cdlab-MS-7A95:~/github/learngit$ git merge feature1
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
cdlab@cdlab-MS-7A95:~/github/learngit$ cat README.md
# learngit
hello world22222222
<<<<<<< HEAD
hello & world22222222
=======
hello and world22222222
>>>>>>> feature1

将"<<<<<<< HEAD", "======="">>>>>>> feature1"删除.保留 "hello & world22222222" 或者"hello and world22222222", 然后再add和commit.
cdlab@cdlab-MS-7A95:~/github/learngit$ git add .
cdlab@cdlab-MS-7A95:~/github/learngit$ git commit -m "merge"
[master a9ea3b9] hello
cdlab@cdlab-MS-7A95:~/github/learngit$ git branch
  feature1
* master
cdlab@cdlab-MS-7A95:~/github/learngit$ git merge feature1
Already up to date.
4 分支策略
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作.

4.1 git stash 常用操作
(1)git stash save "save message"2)git stash list 
(3)git stash show  :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show  stash@{$num}  -p ,比如第二个:git stash show  stash@{1}  -p
(5)git stash apply : 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}6)git stash pop   : 命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash命令:git stash pop stash@{$num} ,比如应用并删除第二个:      git stash pop stash@{1}7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
(8)git stash clear :删除所有缓存的stash
4.2 远程库
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
•查看远程库信息,使用git remote -v;
•本地新建的分支如果不推送到远程,对其他人就是不可见的;
•从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
•在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
•建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
•从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

5 分支命令总结

查看分支
git branch
创建分支
git branch 分支名
切换分支
git checkout 分支名
合并分支(可能产生冲突)
git merge 要合并的分支

note:切换分支再合并
删除本地分支
git branch -d 分支名称
删除远程分支
git push origin --delete 分支名 (eric_fix_conosle_input)
拉取远程库所有的分支
git fetch --all
创建空白分支
(1)使用如下命令(--orphan)新建空白分支, 然后用git status 查看,会发现所有文件都在暂存区.
git checkout --orphan blank_branch

在这里插入图片描述

(2)使用如下命令删除暂存区全部内容
git rm -rf .

在这里插入图片描述

(3)提交文件到分支 ( 因为没有提交记录,分支是无法看见的.)
echo 'blank test' >> README.md
git add README.md
git commit -m 'blank branch'

在这里插入图片描述

(4)将分支push到远程repository
git push origin blank_branch

在这里插入图片描述

6 远程代码管理

添加远程连接(别名)
git remote add origin 地址
推送代码
git push origin 分支名(dev)
下载代码
git clone 地址
拉取代码
git pull origin 分支名(dev)

等价于
git fetch origin dev
git merge origin/dev
保持代码整洁(变基)
git rebase 分支
记录图形展示
git log --graph --pretty-format:"%h %s"

7 Beyond Compare 使用(解决冲突)

在git中配置
git config --local merge.tool bc3(软件别名)
git config --local mergetool.path '/usr/local/bin/bcomp'
git config --local mergetool.keepBackup false
应用beyond compare 解决冲突
git mergetool

8 git 免密登录

URL中体现
原来的地址:https://github.com/knowledging/learngit.git
修改的地址:https://用户名:密码@github.com/knowledging/learngit.git

在.git/config文件中修改
git remote add origin https://用户名:密码@github.com/knowledging/learngit.git
采用SSH登录

9 GIT tag

  • 打tag: git tag -a 版本号 -m “描述信息”
  • 推送所有的tag: git push origin --tags
  • 推送单个tag: git push origin 版本号
  • 删除tag: git tag -d 版本号
  • git checkout “版本号”

10 打patch

场景从一个repository中将commit打成patch添加到另一个repository中

生成patch
git format-patch [commit id1]^..[commit id2] //将包含commit id1 至 commit id2的patch打成包,将生成[000x-commitid1.patch ~ 00x-commitid2.patch]

git format-patch [commit id 1]..[commit id 2] //将不包含commit id 1 至 commit id 2的patch打成,将生成(000x-commitid1.patch ~ 00x-commitid2.patch]

git format-patch -1 [commit id] //指定commit id生成patch,将生成000x-commitid.patch

git diff [commit id1]^..[commit id2] > xxx_diff.patch //将包含commit id1 至 commit id2的patch生成一个xxx_diff.patch, 用git apply命令打patch
打patch
  • 需要注意下patch中的路径
git apply 000-xxx.patch  //允许将自己的信息添加
git am 000x-xxx.patch    //原封不动的打上相应的信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值