zoukankan      html  css  js  c++  java
  • Git:常用命令

    欢迎转载,但请指明出处:https://www.cnblogs.com/zhizaixingzou/p/10241476.html

    下面的内容来自《Git Pro》的阅读总结和实际操作。

    git config --global user.name "John Doe"

    git config --global user.email "johndoe@example.com"

    安装完Git应该做的第一件事就是设置用户名与邮件地址后续每一个提交都会使用这些信息。

    Git配置用于控制Git外观和行为配置3个层次,优先级由大到小依次为:无选项(项目级,记录于.git/config)、--global(用户级,记录于~/.gitconfig)、--system(系统级,记录于/etc/gitconfig

    git config user.name
    git config --list

    查看Git配置。列出的项可能有重复,但只最后一个生效。另外,如果一个配置没有显式设置,不会列在清单中。

    Git使用默认文本编辑器,通常是Vim


    git config --help

    git help config

    查看Git命令的帮助信息,如这里是config

    git init
    该命令在需要被Git管理的项目目录下执行项目目录下会生成Git仓库,但项目目录下的文件还未被跟踪(前一快照和暂存区域中都不存在)。

    git clone https://github.com/chenjw13097/ProgramBricks.git

    在当前目录下创建一个ProgramBricks目录作为项目目录(如果想在本地重命名项目名称,可以在克隆时于URI后面指定,此时项目目录名就不再是默认的了),并为它初始化一个Git仓库然后自动将其添加为远程仓库并以origin” 为简写接着从远程仓库抓取所有数据到仓库,设置本地分支master跟踪远程origin/master分支,同时合并origin/master分支内容到本地master分支,最后检出master分支最新版本的快照到工作目录

    git clone file://C:/Users/phewy/Desktop/test01

    上面的test01是项目目录。克隆的结果是在当前目录下会出现一个项目目录test01

    git status

    查看状态,会列出未跟踪文件、已修改文件、已暂存文件、因包含合并冲突而处于未合并状态的文件,也列出当前所在分支。

    同一文件可以既是已修改状态,也是已暂存状态。此时git add则将追加暂存已修改状态的部分。但提交后,只会出现一次变动,而不会分拆为两次变动

    git add client.java

    如果文件未被跟踪,则跟踪指定的文件(如果给的是目录则递归跟踪目录下的所有文件)存入暂存区域
    如果文件处于已修改状态,则暂存。

    如果文件合并时冲突,则解决冲突后标记文件为冲突已解决,接下来就可以提交。
    综合几种情况,它可以理解为“添加内容到下一次提交中”

    *.[oa]

    !lib.a

    *.class

    *.~

    a/**/h

    doc/*.docx

    ppt/**/*.ppt

    /file.txt

    build/

    .gitignore文件指定需要排除在Git管理之外的文件的模式。该文件在项目目录下创建#开头的行是注释行,空行被忽略。

    git diff
    查看修改之后还没有暂存起来的变化部分
    git diff --cached
    git diff --staged
    查看暂存起来的相对于上一次提交的变化部分

    git commit

    这种方式会启动文本编辑器以便输入本次提交的说明。

    提交时记录的是放在暂存区域的快照。

    每一次运行提交操作,都是对项目作一次快照。

    git commit -m “initial project.”

    此法提交则直接在后部分输入提交说明。

    git commit -a -m 'added new benchmarks'

    该命令可以直接提交已修改状态和已暂存状态的文件,但不包含未跟踪文件

    rm README.MD

    git rm README.MD

    git commit -m “deleted README.MD.”

    这样以后,文件就不再被git管理工作目录中也没有了它

    git add file03

    git commit --amend [-m "update last commit"]
    可修改多次,但是修改最后一条提交

    提交的时间还是上次提交的时间,amend只是覆盖了它的内容,包括新文件或新提交说明。

    git rm --cached README

    git commit -m “did not track README.MD again.”

    这样以后,文件就不再被git管理,但工作目录尚有该文件,只是未跟踪。

    如果在删除前文件为已修改或已暂存,则这些修改都保留在未跟踪文件中。

    如果在删除前文件同时为已修改和已暂存,则必须“git rm -f --cached README”,这些修改合并后保留在未跟踪文件中。

    git mv file01 file02

    git commit -m “rename file01 to file02”

    重命名文件但此时文件的提交历史,完全从新开始。

    git log
    git log --pretty=format:"%h - %an : %s"
    git log --since=2.weeks

    查看提交历史。

    使用它可以统计出开发者的相关操作。

    git log --no-merges issue54..origin/master

    显示origin/master相对于issue54没有合并部分的提交的日志信息。

    git reset HEAD CONTRIBUTING.md
    撤销暂存
    git checkout -- CONTRIBUTING.md
    撤销修改。这个命令会删除修改,需要谨慎,因为它相当于undo,但却没有对应的redo

    git remote

    列出已添加的所有远程仓库的简写。

    如果是初始化仓库,则没有远程仓库。

    如果你已经克隆了仓库,那么至少应该能看到 origin,它是克隆源仓库的默认名。

    git remote -v

    列出已添加的所有远程仓库的简写与其对应的URL

    我们可以轻松拉取其中任何一个远程仓库上其他用户的贡献。

    git remote show origin

    查看远程仓库的详细信息。

    git remote add pb https://github.com/paulboone/ticgit

    添加一个新的远程Git仓库,并制定简写。

    添加的远程Git仓库当与本地仓库有共同的至少是第一个提交对象,也就是说来自同一个项目。

    git fetch pb

    从远程仓库抓取所有本地仓库还没有的数据。

    执行完成后,你将会拥有那个远程仓库中所有分支的引用pb/master

    它并不会自动合并或修改你当前的工作。

    git remote rename pb paul

    重新命名远程仓库的简写,那些过去引用 pb/master 的现在会引用 paul/master

    git remote rm paul

    移除远程仓库。

    git tag v1.4-lw

    创建轻量标签。

    轻量标签本质上是将提交校验和存储到一个文件中,没有保存任何其他信息。

    git tag -a v1.4 -m 'my version 1.4'

    -a,表明这是一个附注标签。

    -m 选项指定了标签说明信息,如果没有会启动编辑器提示输入。

    附注标签是存储在Git数据库中的一个完整对象。包含打标签者的名字、电子邮件地址、日期时间说明信息,也可以使用GPG签名与验证。

    Git可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布版本

    git tag -a v1.2 9fceb02

    在提交打标签,你需要在命令的末尾指定提交的校验和(或部分校验和)。

    git tag

    以字母顺序列出所有标签的名称

    git tag -l 'v1.8.5*'

    模糊匹配得到标签的名称列表

    git show v1.4

    查看标签详细信息。

    git push origin v1.5

    git push origin --tags

    默认情况下,git push 命令并不会传送标签到远程仓库服务器上。

    指定标签或所有标签传送到远程仓库服务器上。

    当其他人从仓库中克隆或拉取,他们也能得到你的那些标签。

    git checkout -b develop v2.0

    在特定标签上创建一个分支,并切换到该分支。

    git config --global alias.ci commit

    git config --global alias.unstage 'reset HEAD'

    别名是原样替换不论是否有空格

    git branch testing

    创建一个分支。该分支与当前分支指向同一个提交对象。

    git checkout testing

    切换分支。

    如果当前有已修改或已暂存文件未提交,切换分支是切不了的。

    工作目录中的文件全部变为该分支最后一个提交时的状态。

    HEAD始终指向当前分支,可以看做是它的别名切换分支就是使HEAD的值等于指定的分支

    git checkout -b iss53

    创建并切换到目标分支

    git checkout master

    git merge hotfix

    hotfix分支内容合并到master分支。

    远程分支拉取后也可以直接合并到当前分支。

    合并的另一种方法是使用变基,但分享了某个分支,对它执行变基操作就会有风险考虑到除了提交历史更线性化些,它能完成的工作merge都能完成,所以笔者选择忘掉变基。

    git branch -d hotfix

    删除分支。

    没有合并到其他分支的分支默认是删不掉的,需要使用-D选项强制删除它。

    git branch

    查看本地分支名称和当前分支。

    git branch --merged

    查看哪些分支已经合并到当前分支。

    git branch --no-merged

    查看所有包含未合并工作的分支。

    git branch -vv

    查看本地分支与远程分支的跟踪关系。

    git push origin serverfix

    git push origin serverfix:serverfix

    git push origin refs/heads/serverfix:refs/heads/serverfix

    推送本地分支到远程仓库上去,在远程仓库上的分支名也为serverfix,本地分支跟踪了它

    有写入权限才能推送到远程仓库上。

    下一次其他协作者从服务器上抓取数据时,他们会在本地生成一个远程分支origin/serverfix可以运行 git merge origin/serverfix 将这些工作合并到当前所在的分支。

    推送上去后,本地分支也自动成为远程分支的跟踪分支,下次推送时必须之前没有人推送过时,这条命令才能生效。如果有人推送过了,你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。

    git push -u origin featureA

    将本地分支featureA推送到远程origin上,新建分支名字也叫featureA,事先不存在。

    git push -u origin featureB:featureBee

    将本地分支featureB推送到远程origin上featureBee,featureB没有跟踪过featureBee。

    git checkout -b serverfix origin/serverfix

    git checkout --track origin/serverfix

    在远程分支基础上建立跟踪分支,对应的远程分支称为上游分支。

    git pull

    在一个跟踪分支上,Git能自动地识别去哪个服务器上抓取数据,并合并到哪个分支。

    git push origin --delete serverfix

    删除远程分支

  • 相关阅读:
    [HAOI2016]食物链
    [TJOI2011]序列
    P2548 [AHOI2004]智能探险车
    [JSOI2008]最大数
    模板之dinic
    Excim的NOIP2017游记
    数列排序
    Car的旅行路线
    [HAOI2006]均分数据
    [luogu2210] Haywire
  • 原文地址:https://www.cnblogs.com/zhizaixingzou/p/10241476.html
Copyright © 2011-2022 走看看