git操作学习笔记

前言:参考教程廖雪峰《GIT教程》,参考视频B站《深入掌握Git与实战开发》

gitignore文件

         在git 操作中,由于每个开发者拥有不同的工程文件,因此这些工程文件是不需要纳入版本控制系统中的。

使用步骤:在 git 目录下添加.gitignore文件,将需要自己屏蔽的文件添加到该文件中。

如在当前目录下有:a.setting , a.project,b.project  文件。

echo “ a.setting \n  *.project  \n  !a.project”  >  .gitignore

然后git不会对a.seeting ,b.project的追踪,但是会对a.project文件进行追踪。

设置相关忽略文件:

*.a   #忽略所有以.a结尾的文件。

!lib.a #但是lib.a除外

/TODO #仅仅忽略项目根目录下的TODO文件,不包括subdir/TODO

build/ #忽略build/目录下所有文件

doc/*.txt 忽略doc目录下所有*.txt文件 

 

基本操作

工作区:就是你电脑能看到的目录。

版本库:工作区有个隐藏的目录“.git”,这个不算工作区,而是git的版本库。

暂存区:需要提交的文件统统放到暂存区。

分支:一个commit对象链,一个工作记录线。

git add  .   //将当前目录下所有文件(不包括.gitignore修饰的文件)添加到版本库

git add –u   //将已纳入版本库的文件进行add

git add *   //添加当前目录下所有文件

HEAD:指向的是当前的分支。

master:指向提交

dev: dev分支  git  checkout –b dev

git  rm    //将文件从版本库中移除

等价于

rm   + git add

git checkout --    //丢弃工作区的最后一次对文件的修改

git reset HEAD    //将之前添加到暂存区的内容移除到工作区

git rm –cached xxx    //将文件从版本库中移除,但文件仍保留在版本库中

重命名:git mv a.txt a.txt  (推荐使用)=>   mv a.txt  b.txt  git add b.txt (操作繁琐)

git config –local user.name “mouchengdeng”

git config –local user.email [email protected]

git相关配置文件:

/etc/gitconfig  --system

 ~/.gitconfig    -global

 .git/config  --local

官方网站:git-scm.com

git图形化界面按:gitk

git合并遵循的原则:三方合并原则

git cherry-pick commitId将某个分支的修改信息应用到另外一个分支上。

stash暂存与取出

git stash    //保护现场

git stash list

git stash pop

git stash apply stash@{0}

标签

在开发到达一个历史性的阶段时,打一个Tag,它是一个指针,没有和分支挂钩。

新建轻量级标签:git tag v1.0.1

新建一个带附注的标签:git tag –a  v1.0.2  –m  “release version”

删除标签:git tag –d  tag_name

恢复到标签:git  reset  --hard tag_name

 

差异比较

暂存区与工作区的差异比较(src 暂存区,dest工作区):git diff

diff --git a/a.txt b/a.txt     #a为暂存区,b为工作区

index f73a649..fcb2bab 100644

--- a/a.txt    # ---- 代表源文件

+++ b/a.txt  # ++++代表目标文件

@@ -1,6 +1,6@@  #源文件从第一行开始,后面还有4行。目标文件:从第一行开始,后

#面有三行。

-add

 c++

 c

 java

+abc

总体大意为:在源文件 –add,+abc就等于目标文件

 

某个提交(src)与工作区(dest)的差异比较:git diff commit_id

暂存区与某个提交的差异比较:git diff –cached commit_id

git diff –cached :比较暂存与最新提交的比较。

git diff HEAD --- xxx : 查看最新提交与工作区之间的差异
两个提交之间的比较:git diff commit_id commit_id

 

git远程与github

git push :推送,在2.0以前推送到远程相同的分支,在2.0以后推送git pull那个分支。(若push失败,很有可能冲突了,需现pull ,手工合并,然后再次push)

git pull :拉取并合并

pull = fetch + merge

github:全球开源仓库

gitlab: 公司内网使用的git远程仓库

git remote add origin http:www.xxxxx/xxx.git   //origin远程仓库的别名,代表url地址

git push –u  origin master   //将本地分支与远程分支进行关联并提交

git remote show //查看远程关联的仓库

ssh,https,http:常用ssh,第一次push需将公钥放置在githab仓库上

remote/origin/master (远程分支,对应远程master分支):如何进行比较,如何进行匹配,判断谁先谁后。git push :1改变remote/origin/master指向,2将代码推送到远程

git push操作完整命令: git  push origin srcBranch : destBranch   //如:git push origin master:master

git pull操作完整命令:  git pull origin srcBranch : destBranch

git remote rm origin //删除远程仓库

git remote add origin url  //添加远程仓库

分支操作

git branch newBranchName  //创建一个新的分支

git checkout BranchName   //切换到选种的分支

git branch –d  BranchName //删除分支 

git branch –v  //查看所有分支

git checkout –b develop   //创建分支并切换到该分支

git checkout –b develop  /origin/develop   //**** 并与远程分支对应

git push origin :develop  //将远程分支删除

git push origin –delete develop  //将远程分支删除

git push –set-upstream origin develop   //创建远程分支

基于Github分支开发操作的操作模型:

  1. develop 分支:所有开发人员将自己所写代码往这分支上合并,变化非常频繁的一个分支。
  2. test分支:供测试使用,变化不是特别频繁的一个分支。
  3. master分支:生产发布分支,变化非常不频繁的一个分支,在发布更新版本是合并。(开发人员代码将代码往test分支上并,test分支往master分支并)
  4. bugfix分支:生产时出现紧急bug,用于紧急修复的分支。

 

merge冲突

1<<<<<<< HEAD

2 in master

3 =======

4 in dev

5 >>>>>>> dev    

解释:在相同行中,HEAD(当前)分支内容为“in master”,在dev分支内容为“in dev”。如需要保存当前分支内容,则将第1,2,3,5行删除,只保留第4行的内容。

 

变量别名

变量别名设置: git config  --global alias.br  branch  //生成的相关文件在~/.gitconfig中

git branch –av   =>  git br –av    

相关的变量别名可按照上述语法规则自定义。原理就是简单的字符串替换。

[email protected]:~/myProject$ cat ~/.gitconfig

[user]

         name = moucheng

         email = [email protected]

[alias]

         br = branch

         a  = add

         ck = checkout

         H  = HEAD

         co = commit

Git  refspec与远程标签

refspec:表示本地分支与远程分支对应的关系。

git  remote show origin   //查看本地与远程的对应关系

git push操作完整命令: git  push origin srcBranch : destBranch   //如:git push origin master:master

git pull操作完整命令:  git pull origin srcBranch : destBranch

远程分支重命名:删除原远程分支(git push origin :develop ),推送新分支到远程(git push –u origin test)。

git checkout –b develop  /origin/develop   //**** 并与远程分支对应

git push origin v1.0  //将标签v1.0推送到远程

git push origin  :refs/tags/v6.0  //删除远程分支

git push –u origin test   //新建远程分支

git checkout –b test    //新建本地分支并切换到该分支

git checkout  --track origin/test  //将本地分支与远程分支建立连接

 

git裸库与submodule

git裸库:它是一个没有工作区的版本库,仅仅用来存放和中转开发者提供代码的一个区域。

git 裸库的初始化:git  init –bare

 

submodule由来:在项目越做越大,一个项目的运行需要依赖其他项目时,引入submodule机制可方便轻松的获取另一个项目的改动信息。

相关步骤:

  1. 在github中新建 两个项目仓库。
  2. 在本地创建父项目
  3. 将一个仓库引入到另一个仓库中:git submodule add  url  mysubdir

 

submodule更新:

在单个的submodule目录下执行:git  pull

或者在parent目录下执行: git submodule foreach git pull

 

clone项目(包含子模块):git clone url  pro_name --recursive

submodule删除:1将submodule从缓存区删除,2将submodule实体文件从工作区删除,3将.gitsubmodule目录删除。

 

subtree

submodule和subtree它们解决的问题是一样的,但是submodule存在一个弊端,比如我们需要在父工程中修改子工程的代码,然后推送到远程仓库中,或者从远程的子工程拉去代码到父工程中,会存在各种问题。

操作:

git subtree  //查看subtree操作的相关命令

git remote add  subtree-origin child_url  //与远程的子项目进行关联

git subtree add –preflix = subtree subtree-origin master  //拉取远程子项目

git subtree push –preflix=subtree subtree-origin master   //将代码推送到子远程仓库

git subtree pull –preflix=subtree subtree-origin master  //更新

你可能感兴趣的:(其他)