git常用操作用例

栏目: 编程工具 · 发布时间: 4年前

内容简介:1.建立本地仓库并且与远端分支相关联A. git init:本地仓库初始化。//本质上生成了一个.git文件B. 在远端仓库建立好项目new-project,并且复制远端仓库的地址Git_Url

1.建立本地仓库并且与远端分支相关联

A. git init:本地仓库初始化。//本质上生成了一个.git文件

B. 在远端仓库建立好项目new-project,并且复制远端仓库的地址Git_Url

C. git remote add origin Git_Url//把远端分支和本地分支相互关联

D. git add .//把需要上传的文件从工作空间传到stage缓存区中

E. git commit -m "XXX"//给本次提交添加说明

F. git push -u origin master

注:第一次提交是远端仓库需要说明分支因此需要使用git push -u origin master,后面提交直接git push。

2.clone远端分支项目

A.git clone Git_Url //clone远端完整项目

git branch 显示本地当前分支。

git branch -a 显示本地以及远端分支。

新clone的仓库是只有本地的master分支以及远端的所有分支,如果需要在本地开发远端仓库的某个分支需要把本地分支和远端分支再做一次映射。

B.git checkout -b 本地分支名 origin/远程分支名 //将远程git仓库里的指定分支拉取到本地(本地不存在并且远端已经有的分支)。

C.git push --set-upstream origin 分支名 //推送本地分支到远程仓库

注:如果当前需求为把远端的一个项目迁移到另外一个项目中,此时我们git clone后在该文件目录中显示一个.git文件,这个文件中包含该项目所有的tags,branches,commit message等关联信息,这时再往新的远端分支推送项目时候并不需要所谓的本地仓库初始化等操作(git init),因为本身clone下来的项目就是一个仓库。因此操作过程应该为:(1)git clone //clone项目(2)git remote add origin Git_Url//把远端分支和本地分支相互关联 (3) git push -u origin master //提交代码,并不需要git add、git commit 等操作,同时带.git的项目自动导入所关联的所有tags,branches,commit message等关联信息。

3.一次完整的提交过程

A.git add 文件名//把文件从本地工作空间提交到本地缓存stage,可以提交多次不会产生commit_id

B.git commit -m "XXX" //把当前stage缓存区中的所有内容一次性提交到本地分支,会生成新的commit_id。也就是所谓的多次add一次commit。

C.git push //把本地分支上的所有commit推到于此分支对应的远端分支 master->origin/master

如果在git pull/push/clone中会遇到需要输入username、password的我们为了方便重复输入会采用两种方式进行身份校验。

一、sshd本地工作空间公钥

二、在git pull http:// $username:password@XXXX.git

C.git status //查看本地工作区与本地分支的差异,简言之就是查看工作区域的状态,有哪些文件变更了。

当本地工作空间和本地缓存stage都没有更新或者所有的跟新已经push到远端分支显示"nothing to commit working directory clean"

D.git diff //查看本地工作区与本地分支的差异,具体文件的变更。

4.历史版本信息

A.查看提交的版本信息 git log;每个log显示一行git log --pretty=oneline

B.git reset --hard commit_id //回退到某个版本

此时再使用git log查看显示的最新一条commit_id则是回退后的最新版本

此时查看git status提示当前版本落后于origin/master远端分几个版本

此时使用git pull指令实质是本地和远端的merge行为。(1)如果没有对该版本做修改,git pull直接fast-forward到远端origin/master的最新版本。(2)如果对老版本执行的单纯的增量,git pull是执行远端和本地的合并,注:单纯的递增是不会引起冲突,结果为远端的最新版本再加上刚才的增量部分。(3)如果对老版本执行增删改操作(都有),git pull 会产生冲突解决冲突后,再git add 、git commit 、git push。

注:冲突之前的commit也会是一次commit记录并且推到远端分支。

C.由于当前的最新git log显示的旧版本的commit_id。因此如果想恢复到远端分支origin/master的最新版本:(1)执行git pull 实现fast-forward。(2)使用git reflog查看头指针HEAD的变化情况,找到原来的回退前的commit_id。然后再执行git reset --hard commit_id回退到最新版本。

5.撤销修改

A.git checkout -- 文件名 //把当前工作区的内容恢复到上一个状态(上一个状态:本地分支的最后一次commit状态)。

B.git reset HEAD 文件名 //把当前stage缓存区的内容送回到本地工作区,无论缓存区有多少次add。

用例:在hi.sh文件中本地添加"add something",git add 添加到缓存区,本地添加"add anything";

(1)执行 git checkout -- hi.sh ,文件变成只有"add something"的变更 //git checkout 只是撤销了本地工作区域的变更;执行 git reset HEAD 文件名 ,把缓存区的内容清空,但是文件内容为"add something",当前文件状态为本地缓存区为空,变更只存在于本地,因此再执行 git checkout -- 文件名,把本地的这次变更回退到本地分支的最后一次commit状态。

(2)执行 git reset HEAD 文件名,把缓存区的内容清空,文件状态为"add something" & "add anything"两次本地变更,再执行git checkout -- 文件名,把本地的两次变更回退到本地分支的最后一次commit状态。

总结:git checkout 是撤销本地变更的,无论是多少次变更,或者是从缓存区回退回来的内容统一的退到本地分支的最后一次commit状态(理解:已经从本地工作区域推到本地缓存的内容不会回退)。 git reset 把当前stage缓存区的内容送回到本地工作区,无论缓存区有多少次add。

6.删除文件

A.删除文件一般流程(理解为一次提交和git add一样) (1)rm 文件 //本地删除(2)git rm 文件//把删除提交到缓存区(过程同git add) (3)git commit -m "XXX" (4) git push

B.文件误删恢复。本地误删 rm 文件:git checkout -- 文件名。

直接缓存区误删 git rm 文件:(1)git reset HEAD 文件名 //恢复缓存区(2)git checkout -- 文件名 //恢复本地

7.分支管理

A.基本分支操作:(1)拉取本地不存在的远端分支以及把本地的分支推到远端仓库的操作在第二小节中明确说明。(2)查看本地分支git branch;查看本地的远端分支git branch -a(注:刚clone下来的项目中包含所有的远端分支,并没有直接映射到本地,需要本地创建分支且与本地远端分支相互关联[一般采用相同的名字,git自动做track])。(3)创建分支:方式一 git branch //创建分支; git checkout //切换到新创建的分支。 方式二 git checkout -b //创建分支并切换 (4)合并分支:git merge //把其他分支合并到当前分支(注:合并之前需要把分支上的修改先进行提交[git add、git commit],如果当前代码还不能提交采用git stash[后边详细介绍]保留当前变更后,再实现分支的合并) (5)合并后删除无效分支(如果没有合并就删除,系统会提示。删除本地分支git branch -d ;删除远端分支 git push origin --delete (6)对于合并后的分支可以直接删除,也可以再把主干分支的代码向该分支merge,执行git checkout release ,执行git merge master,需要注意的是无论原master分支做了什么变更,当前的主干分支和release分支都处于merge状态,因此当把主干分支merge到release分支上面时"一定不会"产生complict冲突。(7)强制删除分支(不需要合并等操作):git branch -D

B.分支冲突:

用例:在子分支上面有新的commit,在主干分支上面也有新的commit,然后执行git merge release会发生冲突,冲突的信息写在发生冲突的文件夹中,手动处理冲突后,再次git add、git commit、git push

C.保存工作现场并恢复:

用例:当前分支的变更还没有commit,此时需要checkout到其他分支进行开发工作,需要保存当前的工作现场,并需要在后边做恢复。

方式一:保存当前工作现场git stash;查看缓存列表git stash list;恢复某一次工作现场 git stash apply stash@{0};删除这个现场记录 git stash drop

方式二:保存当前工作现场git stash;恢复某一次工作现场并且删除记录 git stash pop。

注:虽然可以保存多次工作现场,但在实际工作这种情况很少见。

D.分支结构以及提交记录(主要是看合并的结构):

git log --graph --pretty=oneline --abbrev-commit

为加强对于分支的理解上图:

a.只有一个主干master分支

git-br-initial

b.在master分支上切dev分支

git-br-create

c.在dev分支上有一次commit

git-br-dev-fd

d.git checkout master //切换到master分支

git-br-on-master

e.把dev合并到master分支

git-br-ff-merge

f.在master和feature分支上各自有一次新的commit

git-br-feature1

g.在master和feature分支上各自有一次新的commit,并别合并

git-br-conflict-merged

注:如果对于分支进行深度学习请参考Yuqi Chou推荐的 https://github.com/pcottle/le...

8.标签管理(首先checkout到需要打标签的分支)

git tag //默认给最新的一次commit上面打标签,后面可以跟任意一个commit_id。

git tag -a -m "XXX"//加message的打标签方式,默认给最新的一次commit上面打标签,后面可以跟任意一个commit_id。

git tag //查看本地所有标签

git show //查看标签信息

git push origin //推送一个标签到远端仓库

git push origin --tags//推送全部本地标签到远端仓库

git tag -d //删除一个本地标签

git push origin :refs/tags///删除一个远端仓库标签


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

点击的奥秘:运用说服心理术提升在线影响力(全彩)

点击的奥秘:运用说服心理术提升在线影响力(全彩)

Nathalie Nahai(娜塔莉.纳海) / 陈旭 / 电子工业出版社 / 2014-9-1 / 75.00元

用户的每一次点击,不管是在虚拟商店购物,还是在浏览企业网站,或是漫无目的地把玩手机,都蕴藏着基于心理学的无穷奥秘。《点击的奥秘:运用说服心理术提升在线影响力》作者为全球知名的网络心理学家,其在《点击的奥秘:运用说服心理术提升在线影响力》中将心理学、神经科学及行为经济学巧妙地结合在一起,挖掘和提炼出一套行之有效的网络用户引导策略——既涵盖在线说服最新研究动向,也包括最前沿的科技成果,以及其他诸多惊人......一起来看看 《点击的奥秘:运用说服心理术提升在线影响力(全彩)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码