zoukankan      html  css  js  c++  java
  • git使用基础

    本文介绍的是把本地新建的项目上传到github上,以便之后能随时、随地拉取项目开发。

    1.安装git

    2.安装完成后,启动git bash,执行git命令

    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"

    因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

    注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置。

    3.在项目根目录下执行git init命令

    git init

    执行完之后,就会在项目根目录中生成一个.git隐藏目录。

    4.去github创建自己的repository。

    5.将本地仓库与github新建的远程仓库相关联

    如果github新建仓库地址是https://github.com/koushr/sparkDemo.git,则命令为

    git remote add origin https://github.com/koushr/sparkDemo.git

    如果报错的的话,则先执行remove命令,再执行add命令

    git remote rm origin

    6.将项目的所有文件添加到仓库中

    git add .

    注意,add和点之间有空格

    7.上传github之前,要先pull一下,执行如下命令

    git pull --rebase origin master

    8.将add的文件commit到仓库

    git commit -m "注释语句"

    注意,这里注释语句必须有,不能省略,否则会报错,随便写点什么就好,如first push。

    9.上传代码到github远程仓库

    git push -u origin master

    至此,在github上浏览此仓库,就可以看到上传的代码了。

    之后,如果是在当前电脑开发,则开发完成后直接可以用idea上传代码。如果是在其他电脑开发,则可先通过git来checkout代码,然后在开发完成后上传代码即可。

    常用命令:

    git clone:

    从远程主机克隆一个版本库:git clone <版本库地址> <本地目录名>。如git clone https://github.com/jquery/jquery.git。这将在本机生成一个jquery目录,因为远程主机的版本库名称是jquery。如果我们想指定不同的目录名,则可以git clone https://github.com/jquery/jquery.git myJquery。git clone不仅支持HTTP(s)协议,还支持SSH、Git协议。

    git remote:

    为了便于管理,git要求每个远程主机都有一个主机名。git remote用于管理主机名。git remote 可列出所有远程主机。git remote -v 可以查看所有远程主机及其地址。git clone版本库时,远程主机默认命名为origin。如果想用其他主机名,则在git clone可以用-o选项指定,如git clone -o jquery https://github.com/jquery/jquery.git。

    git remote show <主机名>,可以查看该主机的详细信息。如git remote show origin

    git remote add <主机名> <地址>,用于添加远程主机。

    git remote rm <主机名>,用于删除远程主机。

    git remote rename <原主机名> <新主机名>,用于重命名远程主机。

    git remote prune origin:清除远程分支缓存。有时我们在A端删除了某个远程分支,但是在B端还能看到这个远程分支,删除这个远程分支时失败,此时执行这个命令后,在所有的地方都看不到这个远程分支了。

    git branch:

    查看所有本地分支:git branch。查看所有远程分支:git branch -r。查看所有本地分支和远程分支:git branch -a,远程分支以remotes/origin/XXX显示。

    重命名本地分支xx:git branch -m old_branchName new_branchName,或者在要改名的分支上git branch -m new_branchName

    删除本地分支xxx:git branch -D xxx

    切断当前本地分支与远程分支的跟踪关系:git branch --unset-upstream

    git checkout:

    git checkout A:切换为本地A分支,如果本地没有A分支,则会建一个follow远程A分支的本地A分支,如果远程没有A分支,则会报错。

    git checkout -b A:在当前本地分支的基础上,新建一个本地分支A。

    在远程master分支的基础上新建一个xxx分支:git checkout -b xxx origin/master。注意此时xxx分支其实是follow远程master的。我们可以通过git branch -vv命令来查看本地各分支follow的远程分支。这个时候应该先把本地xxx分支推送到远程xxx分支上,git push -u origin xxx,会自动创建远程xxx分支,并且把本地xxx分支和远程xxx分支关联上。如果我们远程分支名不想叫xxx,而是想叫yyy,则可以git push -u origin xxx:yyy,这样远程就会新建一个yyy分支。同样可以用git branch -vv验证。git push -u origin local_branch_name:remote_branch_name可以执行任意多次,假如remote_branch_name每次都不一样,则每次都会新建一个远程分支,并与本地分支关联。

    git fetch:

    获取远程分支的更新。git fetch <远程主机名> <分支名>

    远程分支有新增的话,必须先执行本命令,才能在本机checkout,否则会报 'origin/xxx' is not a commit and a branch 'xxx' cannot be created from it 错误。

    当想获取所有分支的更新时,分支名可以省略。远程主机名和分支名都省略时,表示获取所有远程主机的所有分支的更新。

    如获取origin远程主机aaa分支的更新:git fetch origin aaa。注意这里origin不能省略,不然会把aaa当成远程主机名,就会报错。

    获取origin远程主机所有分支的更新:git fetch origin

    git pull

    获取远程分支的更新,并merge进本地分支。git pull <远程主机名> <远程分支名>:<本地分支名>

    如获取origin远程主机master分支的更新,merge进本地aaa分支:git pull origin master:aaa。如果是把远程分支merge进当前分支,则冒号及之后可以省略。如远程master分支merge进当前分支:git pull origin master。

    git push

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

    第一次push时,要用上面的git push -u。

    把本地abc分支推送到远程xxx分支:git push origin abc:xxx

    删除远程分支xxx:git push -d origin xxx

    git reset

    git reset --hard 还原本地所有更改

    git reset --hard commitid 还原到指定commitId。注意,是还原到,所以想还原到哪里,就提供那个commitId。假如提供的commitId是前天提交的,那么这两天的提交记录都会消失。

    git revert用于回退远程分支,一般加上-n选项。-n等同于--no-commit,如果不加-n选项,那么回滚几个commitId,就要写几次commit,加了-n,只需在最后一次commit and push即可。 

    git revert HEAD 撤销最新一次commit

    git revert HEAD~1 撤销倒数第二次commit

    git revert HEAD~2  撤销倒数第三次commit

    git revert commitId 撤销指定的commit

    git revert还支持指定范围的撤销,git revert -n fromCommitId..endCommitId。左开右闭,会回滚endCommitId,但不会回滚fromCommitId。如果endCommitId是最新的commitId,那么就会回滚到fromCommitId上。和git reset不同,git revert会保留中间的提交记录。

    把分支回滚到之前某一个版本:

    A->B->C->D,A是好的,B、C、D是有问题的,想回滚到A。ABCD都是commitId。

    第一种方法:用git reset

    git reset --hard A

    git push -f

    必须要有-f参数,否则会报错,提示Updates were rejected because the tip of your current branch is behind。

    有些公司会设置禁止这种情况下的强制push,此时,这个方法就失效了,只能用git revert。

    第二种方法:用git revert

    git revert -n A..D

    commit and push

    或者git revert B^..D。^代表前一次的commitId,^^代表前两次的commitId,依次类推

    git merge

    git merge --squash other_branch_name,之后再commit and push。这样子merge,push后只会有一条commit记录,不会有other_branch_name的一大堆commit记录。

    git log:展示所有的commit记录,可以看出commitId、commit注释、commit人和commit时间。

    git log --pretty=oneline:展示所有的commit记录,每条记录占一行,只能看出commitId和commit注释。

    查看最新的commmitID:

    git log --pretty=oneline | awk '{print $1}' | sed -n '1p'

    或者

    git rev-parse HEAD

    查看远程分支是谁建的、最后一次提交是什么时候:

    git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n

    为啥提示"输入文件指定了两次"???

    如果只想看某个远程分支,则可以在最后面加上grep

    git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n | grep branchName

    git clean

    git clean -df:删除没有git add的文件

    如果只是想dry run,即看看会删除哪些文件,则可执行git clean -ndf

  • 相关阅读:
    安卓:线性布局
    安卓文件的资源访问
    关于安卓的一些初步认识
    haayaGuardV0---3---手机与pc基于p2p通信
    【无中生有】---13---系统发布
    【无中生有】---12---运维与监控
    【无中生有】---11---服务器集群部署
    【无中生有】---7---分布式消息队列
    使用消息队列的 10 个理由
    【无中生有】---10---API接口日志存储设计与实现设计
  • 原文地址:https://www.cnblogs.com/koushr/p/5873450.html
Copyright © 2011-2022 走看看