Git学习笔记

0.0 首次下载git需要做的配置

0.1: 拉取指定分支代码git clone –b 远程分支名 地址

git clone -b dev git@github.com:smallYellowCat/ljj.git

0.2: 拉取指定分支上指定TAG的代码git clone –b 远程分支名 TAG 名 地址

git clone -b dev 1.0.0  git@github.com:smallYellowCat/ljj.git

0.3 拉取远程指定仓库的指定分支到本地

git fetch  remote_repository_index  branch:branch

//举例, 如下命令会拉取origin仓的dev分支到本地,创建同名dev分支。
git fetch origin  dev:dev

//也可直接checkout, 注意拉取的远程仓库的分支在本地已经fetch到最新状态
git checkout -b xxx repository_index/xxx

0.4:查看和设置全局变量

//查看所有的配置以及它们所在的文件
git config --list --show-origin
//查看某一个全局变量的值, varibal_name就是变量名,可以通过上面的命令查找
git config --global  varibal_name
//设置全局变量
git config --global varibal_name  "varibal_value"  //参数值有没有引号看具体的变量

0.5: 本地分支推送到远端不同命分支(指定分支)


git push <remote> <local_branch>:<remote_branch>

//推送当前分支到远端指定分支
git push <remote> head:<remote_branch_name>

//例如推送当前分支到远端dpw分支
git push origin head:dpw

0.6:git首次拉取带有git子模块的项目

git clone --recurse-submodules  仓库地址XXX

1.新建项目并推送到远程

    新建完项目之后(添加忽略文件)按照如下步骤执行

  1. git init   
  2. git add .  
  3. git commit –m “xxxx”  
  4. git remote add origin remote_address  
  5. git push –u origin master  

2.本地新建分支和远程关联

//一次性在本地新建了分支并且切换到了新建的分支上,而且新分支和远程分支已经关联
git checkout –b branch_name

//创建远程分支  
git push origin branch_name
 
//关联  
git branch - -set-upstream-to=remote/branch branch_name  

3.删除本地和远程分支

//查看本地分支
git branch  
//查看远程分支
git branch –r  
//查看本地和远程分支 
git branch –a  
//删除本地分支
git branch –d branch_name 
//删除远程分支
git push origin --delete 分支名  

4. 回退本地分支/回退远程分支

//回退本地分支到指定版本,保留本地修改

git reflog  //查看提交记录

git reset --soft versin_num //回退到指定版本号

//回退远程分支
//首先回退本地分支,然后强制推送到远程

git push -f

5.删除/增加本地分支和远程分支的关联

git remote [remove|add] origin [remote_address]

1. 删除关联

git remote remove origin

2. 增加关联

git remote add origin git@github.com:smallYellowCat/ljj.git

6.分支合并

场景: A分支合并到B分支

  • merge 合并; merge是快速合并,即将改变指针的指向
	git checkout A

	git merge B
	//分支合并完成,如果需要push到远程即可
  • rebase 合并; rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。
	git checkout A

	git rebase B

	注意: 此时合并完成之后B的提交记录在A上依然存在(是B的记录的副本)

6.1 指定文件夹合并

说明: 首先git本身是不支持文件夹级别的合并的,对于指定文件夹合并的操作是通过其他途径来完成的。

场景: A 分支需要合并B分支的view文件夹下的所有文件

 // 1. 如果是要对A分支进行全覆盖那么直接进行下面的操作
 git checkout A

//cd 到要合并的文件目录下, 下面的命令会对A分支的view文件夹下的文件做全覆盖
//xx代表**
 git checkout  B ./view/xx

//2. 如果A分支和B分支都有修改,且合并操作需要保留两者的修改(类似正常的merge)  

git checkout A

//创建A分支的临时分支
git checkout -b A_temp

//对A分支的临时分支的view文件进行全覆盖
// cd 到view文件夹
//xx代表**
git checkout B ./view/xx

//对A分支和A的临时分支进行合并
git checkout A

git merge A_tem
 

示例:指定文件合并–将xxx-develop分支的YarnClientUtil合并到master的YarnClientUtil
指定文件合并--将xxx-develop分支的YarnClientUtil合并到master的YarnClientUtil

7.解决冲突

    Git合并或者其他操作发生冲突后,都要先解决冲突然后重新add,commit,最后push上去。

8.放弃一次合并操作

    首先使用git reflog查看提交的版本号
    然后选择要回退到的版本号进行git reset --hard 版本号命令

9.Git的比较命令

 //比较工作区与暂存区,不加参数
 git diff  
   
 //比较两个分支的不同 
 git diff branchA branch 
  
 //比较暂存与本地最新版本库 
 git diff --cached branchName 
 
 //比较工作区与本地最新版本库 
 git diff HEAD branchName (如果HEAD指向master分支那么head可以换成master)
   
 //其他的比较都类似,只要提供两个要比较的分支或者版本号即可。  

10.Git提交的时候忽略远程已提交,但本地已修改又不想提交的文件

适用场景:一些共用的配置文件,但是每个人又有自己的本地配置,这时候需要以下命令

	git update-index --assume-unchanged [file-path]

其中file-path为要忽略提交的文件路径。如果想恢复提交,使用如下命令:

    git update-index --no-assume-unchanged [file-path]  

11.Git放弃一次commit或者add或者push操作(reset)

命令格式:git reset [--hard|soft|mixed|merge|keep]  版本号或者HEAD~数字

hard:删除工作空间的改动,放弃commit,放弃add,代码会回到你指定的一次commit之前的状态(注意你的修改会被删除,当然也不用担心,因为git永远有后悔药可以吃)  

示例:git reset --hard HEAD~1 或者 git reset --hard 8553b14

这里的数字1代表是第2此commit时的代码,注意是从0开始计算的。8553b14代表的是版本号,可以使用git reflog命令查看所有的版本号。
soft: 不删除工作空间改动代码,撤销commit,不撤销git add  

mixed: 这是一个默认的参数,不删除工作空间改动代码,撤销commit,并且撤销git add . 操作。

git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的

另外两个摘抄官方文档原文如下(没有验证过,不做翻译)
--merge
Resets the index and updates the files in the working tree that are different between <commit> and HEAD, but keeps those which are different between the index and working tree (i.e. which have changes which have not been added). If a file that is different between <commit> and the index has unstaged changes, reset is aborted.

In other words, --merge does something like a git read-tree -u -m <commit>, but carries forward unmerged index entries.

--keep
Resets index entries and updates files in the working tree that are different between <commit> and HEAD. If a file that is different between <commit> and HEAD has local changes, reset is aborted.

12.git使用ssh key注意的小细节

    在配置完ssh key之后使用ssh协议clone下来的库才能保证以后进行pull或者push等操作不用输入用户名和密码。

13.git的工作区,暂存区,版本库之间的关系

    在初始化git版本库之后会生成一个隐藏的文件 .git ,可以将该文件理解为git的版本库 repository,而我们自己建立的项目文件夹即工作区 working directory ,在.git 文件夹里面还有很多文件,其中有一个index 文件 就是暂存区也可以叫做 stage ,git还为我们自动生成了一个分
支master以及指向该分支的指针head ,如下图
各个区的关系图
    从图中可以看出来respository包括分支master和stage, working diretory 可以理解为我们打开开发环境如eclipse,里面的内容即工作区的内容,
在工作区里面有的代码以及配置文件等我们需要提交到版本库里面,最终是到了分支master上面,暂存区只是一个临时保存修改文件的地方。

14. 标签

像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)

//打标签
	git tag -a   标签名   -m  "注释"
	
//查看标签
	git tag
	
// 推送本地标签到远程
	git push origin 标签名
	
//一次提交所有tag
	git push origin --tags
	
//删除本地标签
	git tag -d 标签名
	
//删除远程标签
	//方法1
	git push origin :refs/tags/标签名
	//方法2
	git push origin --delete 标签名
	
//针对指定的一次提交打标签
	//查看提交
	git log --pretty=oneline
	//针对某次提交打标签
	git  tag -a  标签名  提交的版本号


15. 分支重命名

//重命名本地分支
git branch -m  oldBranch  newBranch
//删除远程分支
git push --delete origin oldBranch
//推送重命名后的分支
git push origin newBranch

16. 查看文件被哪个规则忽略

	git check-ignore -v csearch-web.zip

17. git commit --amend 命令

创建新的提交来替换当前分支上最近一次的提交。比如你一开始commit到了本地仓库,后来觉得可能提交信息描述不对,或者说你想让远程仓库的提交信息只显示一条, 那么你可以使用该命令。

如下, 示例,发起了三次commit,但是最后两次都是加了 --amend选项,所以远程仓库只能看到一条提交。

//第一次
git commit -m "the first commit"
//第二次
git commit --amend

//第三次
git commit --amend

在这里插入图片描述

//注意,上面两次git commit --amend的时间还是第一次的提交时间,所以如果需要修改时间未当前的时间可以使用以下方法

git commit --amend --date="xxxxxxx"

由于时间格式写起来比较繁琐,我们继续看下面的命令,在git的命令行中输入 date -R, 我们可以得到如下结果:
在这里插入图片描述

//然后我们可以直接使用此命令的输出来替换--date中的时间字符串即可
git commit --amend --date="$(date -R)"

18. revert

git revert用来取消某一个或者某几个提交,不会影响其他的提交。什么意思呢?

假设你有三个提交 commit1, commit2, commit3;然后你执行git revert commit2 或者 git revert HEAD^1(效果一样);此时你的提交就只剩下commit1,commit3;注意commit3还在,这就是git revert和git reset的不一样的地方, git reset会将所有的提交都退回到你的暂存区,也就是说假设你执行git reset --soft commit2, 此时的你的提交记录就只剩下commit1了。因此一般情况下都推荐使用revert。

git revert是通过一个新的commit来抵消掉你要revert掉的commit,默认情况下自动发起commit,你可以通过-n参数来指定手动commit。

19. git制作patch

20. git 修改提交者的信息为任意人

	// 修改提交者为自己
	git commit --amend --reset-author

	// 修改提交者为任意人, 注意邮箱信息是必填
	git commit --amend --author="xxxxx <aaaa@aaa.com>"

FAQ :

  1. git clone 报错显示file name too long…
    //解决办法, 执行以下命令,全局生效, 如若只想对本库生效,去掉--global参数
	git config --global core.longpaths true
  1. 远程删除了分支,但是本地还存在
	//通过命令查看本地的分支的追踪情况,可以看到有stale(陈旧,腐败)的分支
	git remote show origin

在这里插入图片描述

	//通过prune命令来删除
	//用法 git remote prune [<options>] <name>
	git remote prune origin
	//或者使用以下命令解决
	git pull -p
	//或者 
	git fetch -p

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值