git的一些常用的操作

git常用操作

基本命令

  1. git -help大概帮助,git --help 详细帮助

设置

  1. git config --global user.name “your name”设置使用git时得姓名和邮箱地址
  2. git config --global user.email “your email”这个命令,会在“~/.gitconfig”中以如下形式输出设置文件。在github上公开的仓库提交日志的时候,这里设置的姓名和邮箱也会被公开。
  3. Git config -–global color.ui auto 让命令得输出拥有更高的可读性

获取远程仓库的代码

  1. git clone url克隆远程地址的源码
  2. Git clone git@github.com : hirocastest/Hello-World.git ,将已有仓库添加到身边的开发环境中,这个命名可以将远程仓库中的代码拉取到本地仓库,执行git clone命令后我们会默认处在master分支,同时系统会自动将origin设置成远程仓库的标识符。也就是说但当前仓库的master分支与Github上远程仓库origin的master分支在内容上是一样的

在本地初始化版本管理仓库

  1. git init初始化本地仓库,使用的场景为本地项目还没有创建git版本管理仓库,执行之后就能够在本地进行版本管理

为本地仓库关联远程仓库地址

  1. git remote add origin https://github.com/Myjacklee/repositoryName.git将创建好的仓库与本地仓库进行关联,什么是origin,origin是远程仓库的别名,当我们在本地init了一个git版本库之后,执行一个git remote add origin git@github.com:zonggenli/myProject.git,这里的origin就是远程仓库的别名,其实我们完全不用按照github上面的指引,比如我们把origin设置成lizonggen也是行的

push

  1. 命令格式 git push <远程主机名> <本地分支名>:<远程分支名>
  2. git push -u origin master将本地新创建的仓库推送到远程的空仓库(注意远程的空仓库是空的,如果之前刚设置过远程仓库的地址,且远程仓库初始化的时候添加了初始化文件,执行push后则会出现错误,需要先执行 git pull 操作将远程仓库中的内容拉取到本地进行合并操作),当前分支的内容会被推送给远程仓库origin的master分支,-u可以正在推送的时候,将origin仓库的master分支设置为本地仓库当前分支的upstream(上游)。添加了该参数之后,将来运行git pull,命令从远程仓库分支获取内容时,本地仓库的这个分支就可以直接从origin的master分支获取内容,之后将代码推送到远程仓库的时候如果只执行git push操作则会默认推送到当前分支的上游分支上去。
  3. git push -u origin feature-D,在本地床创建一个新的分支并推送到远程仓库,为远程仓库新建一个同名分支,除了master分支之外,远程仓库也可以创建其它分支git checkout -b feature-D,比如我们在本地仓库创建feature-D分支,并将它以同名的形式push到远程的仓库中

fetch

  1. git fetch upstream从远程仓库获取实时代码,与自己仓库的分支进行合并

  2. git fetch,对于git fetch可以理解为 git pull = git fetch <branchName>+ git merge FETCH_HEAD(FETCH_HEAD是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息,通过git log -p FETCH_HEAD 可以查看到更新的信息),git fetch是将远程主机得最新内容拉取到本地,用检查了再决定是否合并到本机分支当中,如果决定合并分支分支则使用git merge FETCH_HEAD进行合并操作,而git pull则是将远程主机的最新内容拉取下来后直接进行合并,可能会产生冲突,需要手动解决

    git fetch <远程主机名> 将远程主机的更新全部取回本地

    git fetch <远程主机名> <分支名> 获取远程主机的指定分支

pull

  1. git pull <远程主机名> <远程分支名>:<本地分支名>

  2. git pull 使用场景,如果之前在本地使用git进行了项目管理,然后突然有一天你想把本地的git推送到远程服务器,于是你在github上新建了一个项目,并勾选了init README.md选项,当在本地git使用push命令会出现错误,使用pull也会出现错误,这是因为绑定了两个相关的历史版本信息,需要执行一下命令 git pull origin <branch> --allow-unrelated-histories进行冲突解决

status

  1. Git status 用于显示工作目录和暂存区的状态。(红色的文件还在工作区)使用此命令能看到哪些修改被暂存到了,那些没有,哪些文件没有被git tracked到。Git status不显示已经commit到项目历史中的信息。看历史信息要使用git log

add

  1. Git add 将文件内容添加到索引(将修改添加到暂存区)。也就是将要提交的文件的信息添加到索引库中,git add .当前文件夹中所有文件添加到暂存区

commit

  1. Git commit 可以将当前暂存区中的文件实际保存在仓库的历史记录当中。比如git commit -m “first commit”,-m参数后的first commit称作提交信息,是对这个提交的概述。
  2. git commit -am "massage"一次完成添加到暂存区和提交到仓库的历史记录中
  3. git commit --amend如果要修改上一条提交信息,则可使用该命令,执行命令后会启动编辑器,修改编辑器中相关的内容就可以完成更改

log

  1. git log 查看以往仓库的提交日志
  2. git log –pretty=short 以简短的一行显示提交的日志
  3. git log filename查看对应文件的提交日志
  4. git log -p查看提交所带来的改动
  5. git log --graph以图标的形式查看分支

diff

  1. git diff 查看工作树与暂存区的差别
  2. git diff HEAD 查看工作树与最新提交的差别,不妨养成这样的好习惯,在执行git commit命令的之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确定完毕后再提交

分支操作

master 分支是Git默认创建的分支,因此基本上所有的开发都是以这个分支进行的,在进行团队合作的时候通常会有一个release分支,团队成员接到任务之后会基于release分支创建新的分支,并在新的分支开发特性分支,开发完毕后再合入release分支

branch

  1. git branch显示分支一览表,添加-a参数可以同时显示本地仓库和远程仓库分支的信息。
  2. git branch -vv显示当前所有分支与远程分支的关系
  3. git branch -m oldName newName更名
  4. git branch -d branchName 删除分支
  5. 删除分支操作 :git branch -a 查看本地分支和远程分支 git push origin --delete (branchname) | git branch -d -r <branchname> 删除远程分支 git branch -a 再次验证远程分支是否被删除,若被删除: git branch -d (branchname) 删除本地分支(在删除某一分支的时候需要切换到其他分支)

checkout

  1. git checkout -b feature-A创建名为feature-A的分支下面的代码效果相同

git branch feature-A

git checkout feature-A

在分支feature-A做的操作不会影响到master分支,因此做git checkout master后再查看代码,会发现在分支feature-A做的操作已经没有了

  1. git checkout -b feature-D origin/feature-D获取远程仓库中feature-D分支的内容,-b参数后面是新建的分支名称,新建分支后面是获取来源分支的名称。例子中指定了origin /feature-D,也就是说以名为origin的仓库(这里指github段的仓库)的feature-D分支为来源,在本地仓库中创建feature-D分支,这里的本地feature-D的上游分支就是远程仓库的feature-D分支,如果这时再执行 git checkout -b feature-F origin/feature-D,则会在本地创建一个feature-F分支,这个分支的上游分支也是 origin/feature-D分支,如果同时进行push则可能会产生冲突
  2. git reflog show <分支名> 查看对应分支是从哪一个分支拉出来的

merge

  1. git merge –no-ff feature-A合并分支feature-A到master主分支,注意feature分支并不会被删除掉 -no-ff 不使用fast-forward方式合并,保留分支的commit历史

reflog

  1. git reflog查看当前仓库的操作日志,在日志中可以看到commit、checkout、reset、merge等Git命令的执行记录,只要不进行Git的GC操作,就可以随意调调取到近期的历史状态

stash

  1. git stash在没有add之前用于临时保存修改,常见的开发场景有开发到一半的时候,代码还不想提交,然后需要去同步远端的代码。如果本地的代码和远程代码没有冲突,可以直接通过pull进行,然是如果发生了冲突,直接git pull会拒绝覆盖当前的修改,遇到这种情况先需要保存本地的代码,再进行git pull,然后再pop出本地的代码(进一步理解)

    场景二:你在你的分支进行开发,开发到一半突然接到另外一个需求,需要新建一个分支进行bug修复操作,但是如果你的代码不进行提交则不能进行分支切换,这时候可以执行git stash命令保存本地代码,然后切换到其他分支进行bug修复,待开发完成之后再切换回来

    git stash 保存本地代码(包括暂存的和非暂存的)

    git pull 拉去远程的代码 //todo 需要测试的如果远程仓库已经被别人更新了,自己与远程仓库的内容有冲突,然后进行git pull操作

    git stash pop(这个应用后就直接弹出了) | git stash apply(这个可以将stash应用于多分分支)恢复临时的代码

    git stash list 查看现有的stash

    git stash drop 删除stash

    git stash show 查看对应的stash的变更 ,添加 -p查看特定stash的全部diff

rebase

  1. git rebase 场景介绍,假设现在基于远程分支master创建一个叫mywork分支,然后你在你的分支上有两个提交,与此同时master分支也做了一些修改并做了两个提交,这就意味这这两个分支同时前进了,这个时候可以选择使用pull命令把master分支上的修改拉下来并与你的修改进行合并,看起来就像是一个新的合并提交,具体的操作为先切换到master分支使用git pull命令拉取远程仓库的代码,然后切换到自己的分支git checkout mywork,然后执行git rebase master,这个命令会将自己的分支中每个提交commit都取消掉,并把他们临时保存为补丁,然后把mywork更新为最新的分支状态,最后把这些补丁应用到新的mywork分支上,mywork分支更新之后它会指向新的提交,旧的提交随之会被丢弃掉

    在执行rebase 的过程当中可能会出现冲突,出现冲突的时候Git会停止rebase并让你去解决冲突,在解决完冲突之后,使用git add命令去更新这些操作,但是不需要执行git commit,只需要仅需执行git rebase --continue命令,这样git会继续应用剩余的补丁,如果想终止rebase可以执行git rebase --abort

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F0I2SwCJ-1628407473920)(.image/image-20210731170035636.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U0lANvyP-1628407473923)(.image/image-20210731170223800.png)]

  2. git rebase -i HEAD~2用该命令可选定当前分支中包含HEAD(最新提交)在内的两个最新历史记录为对象,并在编辑器中打开,将第二行的pick修改为fixup,这样两个提交记录就合并到了一个提交记录了

常见情景

在本地新建一个分支并推送到远程仓库:

  1. git branch -a 查看所有分支
  2. git checkout -b dev_lzg dev,以本地的dev分支为基新建dev_lzg分支,
  3. git push origin dev_lzg:dev_lzg 将本地的dev_lzg分支推送到远程的dev_lzg分支 git push <远程主机> <远程分支名>:<本地分支名>
  4. git branch --set-upstream-to=origin/dev_lzg 将本地分支与远程分支进行关联,如果该步没有执行则拉取远程的代码需要执行git pull origin dev_lzg 需要标明远程分支的具体分支名

回溯历史

  1. git reset --hard hashcode回溯历史

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2iq6s65q-1628407473924)(E:\图片\mdImage\image-20200520162034389.png)]

    回溯到创建feature-A分支之前,创建一个名为fix-B特性的分支,要让仓库的HEAD、暂存区、当前工作树回溯到指定状态就要用git reset --hard命令,只要提供目标时间点的哈希值就可以完全恢复到该时间点的状态

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值