git整理

1      Git介绍

Git是一款免费开源分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

1.1      Git与SVN区别

SVN

GIT

是否分布式

非分布式

分布式

存储方式

文件存储

元数据方式存储

分支

分支就是另一个目录

指针

全局版本号

内容完整性

优于SVN

   

2      安装与配置

$ apt-get install git

$ git config --global user.name “Your Name”

$ git config --global user.email “[email protected]

3      本地仓库

Git目录下分为三个区域:

工作区(working dir):操作的目录

暂存区(stage):.git目录下,存放add内容

版本区(HEAD):.git目录下,存放各个版本个信息和内容

3.1      创建仓库

3.2      工作目录上添加文件

工作目录上添加文件。利用git status查看修改状态

3.3      添加修改到暂存区

3.4      提交修改到版本区

用commit提交修改,-m带上提交说明。提交完后用log可以查看版本记录。

3.5      再次修改文件并提交

对文件进行修改

添加修改change1

提交修改change1

3.6      撤销修改

3.6.1        从版本区中恢复工作区

先对工作区中进行修改,再用chekout -- <file>命令,从版本区中恢复

3.6.2        从暂存区中恢复工作区

修改文件add到暂存区,再修改文件,此时可以用chekout -- <file>命令从暂存区恢复工作区

3.6.3        从版本区中恢复工作区和暂存区

命令git reset --hard <commitid>可以从版本区中指定的版本恢复工作区和暂存区。<commitid>为提交id,或者版本指针。

提交id: 可以是id的前几位,但至少4位

指针:    HEAD  当前指针

              HEAD^ 上一版本;HEAD^^表示上上版本,以此类推

              HEAD~<N> 前几个版本

3.6.4        总结

git reset --hard <commitid> 从版本区中指定的版本恢复工作区和暂存区

git checkout -- <file> 是从最后一次的add或commit中恢复

【注】git checkout 不加--,是切换分支

3.7      删除文件

用git rm命令删除文件,再git commit提交。

3.8      分支

Git中的分支是用指针完成的,所以效率特别高

3.8.1        创建分支

git checkout -b <分支名> 创建并切换到分支

git branch 查看分支(分分支前的*表示当前分支)

3.8.2        自动合并分支

先在dev分支上做些修改

在master上合并dev

删除分支

3.8.3        合并冲突

如果两条分支都有各自的修改,那么合并操作不能自动进行。需要手动解决冲突。合并分支有merge和rebase两种方法,推荐使用rebase。

3.8.4        merge

在dev上修改readme.txt

在master分支上修改readme.txt

在master上合并dev分支,提示冲突

此时,readme.txt文件变为

修改readme.txt为

解决冲突后add, commit.

3.8.5        rebase

使用流程:

l  使用git rebase合并分支

l  修改冲突,文件修改后用git add添加

l  执行git rebase --continue继续下一个冲突解决,直到所有冲突都解决

合并前分支情况如下

执行git rebase后,会把当前分支的每个commit都取消掉,并把它们临时保存为pathch(放在.git/rebase目录中),然后把分支更新到新的origin。最后把保存的补丁应用到分支上。

最后的效果,所有的commit都在一条分支上,就像没有存在过分支一样。下图展示了rebase与merge的区别。

4      远程仓库

4.1      创建远程仓库

4.2      关联远程仓库

4.3      上传到远程仓库

格式为 git push –u <远程仓库名> <本地分支名>[:<远程分支名>]

【注】第一次上传时候需要-u参数,以后更新修改不需要-u

【注】若远程分支名与本地分支名相同,可以省略:以及后面的远程分支名

远程仓库上可以看到dev分支了。

4.4      远程冲突

因为在新建远程仓库时,已经有有修改了(README.md)。

先用fetch下载,再merge,最后push

# git fetch origin master

# git log -p master origin/master

# git merge origin/master

# git push origin master

4.5      Fork分支

从已存在的仓库中fork

4.6      Clone分支

命令git clone下载远程分支到本地。若不是master分支,需要添加-b <分支名>

4.7      推送到远程

先对本地仓库进行修改

用git push <远程名> <本地分支名>:<远程分支名>

在远程仓库上可以看到修改

4.8      Pull request (PR)

将Fork出来的分支修改合并到源分支上上,需要提pull request,由源分支负责人同意后合并。

在iSource页面上点击New Merge Request

填写PR信息

在源分支上点击Merge,修改自动合并

5      总结

5.1      一般流程

5.2      常用git命令

git init

把当前的目录变成可以管理的git仓库,生成隐藏.git文件。

git add <file>

把文件修改添加到暂存区去。

git rm <file>

删除XX文件

git commit -m “XX”

提交修改 –m 后面的是注释。

git status

查看仓库状态

git diff <file>

查看XX文件修改了那些内容

git log

查看版本历史

git reflog

查看历史记录的版本号id

git reset --hard <commitid>

              从版本区中恢复。<commitid>可以是版本指针或者Commit ID

              HEAD    当前版本

              HEAD^   上一版本。这里可以有多个^,每个表示回退一个版本

              HEAD~<N> 表示回退N个版本

              Commit ID     可以是Commit ID的不重复前几位(至少4位)

git checkout -- <file>

把文件在工作区的修改全部撤销。

git checkout -b <分支名>

创建并切换到分支上

git branch <分支名>

创建分支

git branch

查看当前所有的分支

git branch -d <分支名>

删除dev分支

git checkout <分支名>

切换到分支

git merge <分支名>

在当前的分支上合并分支

git stash

把当前的工作隐藏起来 等以后恢复现场后继续工作

git stash list

查看所有被隐藏的文件列表

git stash apply

恢复被隐藏的文件,但是内容不删除

git stash drop

删除文件

git stash pop

恢复文件的同时 也删除文件

git remote [-v]

查看远程库名称

-v 列出详细信息

git remote add origin <远程仓库>

关联一个远程库

git clone [-b <分支名>] <远程仓库>

从远程库中克隆。

-b <分支名>表示克隆哪个分支。若没有,则默认master

git push [-u] <远程名> [<本地分支名>][:<远程分支名>]

将本地分支推送到远程库对应的分支上

-u 第一次推送需要加这参数,以后就不需要

若省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名)

若省略本地分支名,则表示删除指定的远程分支

分支开发原则:

如果本地dev分支有修改,则需要先切换到master分支,把本地分支的修改merge回master(git merge dev),然后在master上把合并后的内容push到master上;然后再切换回本地分支,再把master的内容merge回分支,然后就继续在分支开发。



开发流程:

// 查看本地分支

git branch

// 显示本地、服务器所有分支

git branch -a

// 显示本地分支和服务器分支的映射关系

git branch -vv



// 切换分支(和创建分支就差一个-b参数)

git checkout {{branch_name}}


 // 创建新分支,新分支的代码来自于当前分支

git checkout -b  [分支名] 

// push本地分支代码到远端服务器,如果远端服务器没有该分支,将会自动创建;

git push origin [远端分支名]



// pull远端分支代码到本地当前分支(建议使用)

git pull origin master

如果只想用git pull,可能需要建立track关系,则使用
git branch  --set-upstream-to=origin/<远端branch_name> <本地branch_name>
输出结果:Branch h5_dev set up to track remote branch h5_dev from origin. 



// 合并本地master分支到当前分支,比如当前处于dev分支,则把master上的代码merge到dev分支上

git merge master

// 合并远程master分支到当前分支

git merge origin/master



// 删除本地分支

git checkout {{another_branch}}

git branch -d {{local_branch_name}}

//删除远程分支

git push origin --delete {{branch_name}}





# 假设本地有两个分支: masterdev, 使用dev进行本地开发

# Step1. dev.commit

git status  # 当前分支,修改的文件

git diff    # 具体的修改

git commit -m "{COMMIT_MESSAGE}" .  # 提交

# Step2. master.update.merge-dev

git checkout master # 切换到master分支

git pull origin master:master   # 更新master

git merge dev   # 合并dev分支的修改

git push origin master:master   # 提交代码到远程Git

# Step3. dev.update

git pull origin master:dev  # 更新dev

git checkout dev    # 切换回dev, 以便下一步的开发



常用命令:

  1. git config --global user.name
  2. git config --global color.status auto
  3. git config --global color.diff auto
  4. git remote -v// 查看远程分支的git路径
  5. git clone [email protected]/tv.git
  6. git status  // 查看当前版本的状态(是否修改)
  7. git add xyz  // 添加当前修改的文件到暂存区 or 跟踪新文件(git add .把所有修改的文件add在暂存区)
  8. git commit -m '{{update_msg}}'
  9. git rm xxx  // 从当前跟踪列表移除文件,并完全删除
  10. git rm -cached xxx// 仅在暂存区删除,保留文件在当前目录,不再跟踪
  11. git mv old_name new_name// 重命名文件
  12. git log
  13. git log -n
  14. git log --stat
  15. git show b4f44fe
  16. git diff

代码量统计

git log --author="pWX490102" --since ==2018-01.26 --until=2018-03-24 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -

强制回滚命令:

git reset --hard e1da2c37bdaf3df52b9cf105ec7a7bd83f488bc1(上一次提交的号)

从主分支拉取代码到新分支

git branch --set-upstream-to=origin/master appMarket-pyq

把远程分支拉倒本地,并建立关联关系track:

git checkout --track origin/jiangbo_dev
Branch jiangbo_dev set up to track remote branch jiangbo_dev from origin.

Switched  to a new branch 'jiangbo_dev'

猜你喜欢

转载自www.cnblogs.com/rechel/p/9006558.html