zoukankan      html  css  js  c++  java
  • Git学习

    工作区—(add)—>暂存区—(commit)—>本地仓库—(push)—>远程仓库

    远程仓库—(clone、pull、fetch)—>本地仓库—(reset)—>暂存库—(reset)—>工作区

    把一个项目提交到码云上

    方式一:(推荐)                                                          

      在码云上创建一个空的远程仓库

      将远程仓库克隆到本地(git clone url)

      在本地仓库增添内容

      将工作区的内容添加到暂存区(git add .)

      将暂存区中的内容提交到本地仓库(git commit -m "说明")

      将本地仓库中的内容推送到远程仓库(git push origin master)

    方式二:

      在本地初始化仓库(git init)

      向本地仓库增添内容

      将工作区的内容增添到暂存区(git add .)

      将暂存区中的内容提交到本地仓库(git commit -m "提交说明")

      在码云上新建一个空仓库

      本地仓库和远程仓库建立联系(git remote add origin 网址)

      将本地仓库的内容推送到远程仓库(git push origin master)

    git命令

    1.git status  状态

    2."git add <file>..." 更新要提交的内容

    3."git checkout -- <file>..." 丢弃工作区的改动

    4.git log       打出git 更新的log

    5.git reset --soft ...    重置软件

    6.git reset --hard ...   重置硬件

    7.git stash list  显示进度列表。此命令显然暗示了git stash 可以多次保存工作进度,并用在恢复时候    选择。

    8.git stash    保存当前的工作进度。会分别对暂存区和工作区的状态进行保存。

    9.git pull --rebase  更新本地分支

    Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。

    Git常用操作命令:

    1) 远程仓库相关命令

    检出仓库:$ git clone git://github.com/jquery/jquery.git

    查看远程仓库:$ git remote -v

    添加远程仓库:$ git remote add [name] [url]

    删除远程仓库:$ git remote rm [name]

    修改远程仓库:$ git remote set-url --push [name] [newUrl]

    拉取远程仓库:$ git pull [remoteName] [localBranchName]

    推送远程仓库:$ git push [remoteName] [localBranchName]

    *如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:

    $git push origin test:master         // 提交本地test分支作为远程的master分支

    $git push origin test:test              // 提交本地test分支作为远程的test分支

    2)分支(branch)操作相关命令

    查看本地分支:$ git branch

    查看远程分支:$ git branch -r

    创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支

    切换分支:$ git checkout [name]

    创建新分支并立即切换到新分支:$ git checkout -b [name]

    删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

    合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并

    创建远程分支(本地分支push到远程):$ git push origin [name]

    删除远程分支:$ git push origin :heads/[name] 或 $ gitpush origin :[name] 

    *创建空的分支:(执行命令之前记得先提交你当前分支的修改,否则会被强制删干净没得后悔)

    $git symbolic-ref HEAD refs/heads/[name]

    $rm .git/index

    $git clean -fdx

    3)版本(tag)操作相关命令

    查看版本:$ git tag

    创建版本:$ git tag [name]

    删除版本:$ git tag -d [name]

    查看远程版本:$ git tag -r

    创建远程版本(本地版本push到远程):$ git push origin [name]

    删除远程版本:$ git push origin :refs/tags/[name]

    合并远程仓库的tag到本地:$ git pull origin --tags

    上传本地tag到远程仓库:$ git push origin --tags

    创建带注释的tag:$ git tag -a [name] -m 'yourMessage'

    4) 子模块(submodule)相关操作命令

    添加子模块:$ git submodule add [url] [path]

       如:$git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs

    初始化子模块:$ git submodule init  ----只在首次检出仓库时运行一次就行

    更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下

    删除子模块:(分4步走哦)

     1) $ git rm --cached [path]

     2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉

     3) 编辑“ .git/config”文件,将子模块的相关配置节点删除掉

     4) 手动删除子模块残留的目录

    5)忽略一些文件、文件夹不提交

    在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如

    target

    bin

    *.db

    =====================

    Git 常用命令

    git branch 查看本地所有分支
    git status 查看当前状态 
    git commit 提交 
    git branch -a 查看所有的分支
    git branch -r 查看本地所有分支
    git commit -am "init" 提交并且加注释 
    git remote add origin git@192.168.1.119:ndshow
    git push origin master 将文件给推到服务器上 
    git remote show origin 显示远程库origin里的资源 
    git push origin master:develop
    git push origin master:hb-dev 将本地库与服务器上的库进行关联 
    git checkout --track origin/dev 切换到远程dev分支
    git branch -D master develop 删除本地库develop
    git checkout -b dev 建立一个新的本地分支dev
    git merge origin/dev 将分支dev与当前分支进行合并
    git checkout dev 切换到本地dev分支
    git remote show 查看远程库
    git add .
    git rm 文件名(包括路径) 从git中删除指定文件
    git clone git://github.com/schacon/grit.git 从服务器上将代码给拉下来
    git config --list 看所有用户
    git ls-files 看已经被提交的
    git rm [file name] 删除一个文件
    git commit -a 提交当前repos的所有的改变
    git add [file name] 添加一个文件到git index
    git commit -v 当你用-v参数的时候可以看commit的差异
    git commit -m "This is the message describing the commit" 添加commit信息
    git commit -a -a是代表add,把所有的change加到git index里然后再commit
    git commit -a -v 一般提交命令
    git log 看你commit的日志
    git diff 查看尚未暂存的更新
    git rm a.a 移除文件(从暂存区和工作区中删除)
    git rm --cached a.a 移除文件(只从暂存区中删除)
    git commit -m "remove" 移除文件(从Git中删除)
    git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)
    git diff --cached 或 $ git diff --staged 查看尚未提交的更新
    git stash push 将文件给push到一个临时空间中
    git stash pop 将文件从临时空间pop下来
    ---------------------------------------------------------
    git remote add origin git@github.com:username/Hello-World.git
    git push origin master 将本地项目给提交到服务器中
    -----------------------------------------------------------
    git pull 本地与服务器端同步
    -----------------------------------------------------------------
    git push (远程仓库名) (分支名) 将本地分支推送到服务器上去。
    git push origin serverfix:awesomebranch
    ------------------------------------------------------------------
    git fetch 相当于是从远程获取最新版本到本地,不会自动merge
    git commit -a -m "log_message" (-a是提交所有改动,-m是加入log信息) 本地修改同步至服务器端 :
    git branch branch_0.1 master 从主分支master创建branch_0.1分支
    git branch -m branch_0.1 branch_1.0 将branch_0.1重命名为branch_1.0
    git checkout branch_1.0/master 切换到branch_1.0/master分支
    du -hs

    -----------------------------------------------------------
    mkdir WebApp
    cd WebApp
    git init
    touch README
    git add README
    git commit -m 'first commit'
    git remote add origin git@github.com:daixu/WebApp.git
    git push -u origin master

    Git的版本管理

      清空暂存区(git rm --cache 文件名)

      查看历史(过去的)版本(git log)

      查看所有(过去的和未来的)版本和操作记录(git reflog)

      回到某个版本(git reset)git reset --hard 版本号  回退到某个版本 

                                                git reset --soft 版本号  回退到某个版本,把未来文件放在暂存区

                 git reset --mixed 版本号 回退到某个版本,把未来文件放在工作区

      给当前版本添加轻量级的版本标签(git tag 标签号)

      给历史版本添加轻量级的版本标签(git tag 标签号 版本号)

      添加有备注的版本标签(git tag -a 标签号 -m "备注")

      查看标签(git tag)

      显示标签详细信息(git show 标签号)

      删除标签(git tag -d 要删除的标签号)

      对比版本之间的差异(git diff 前版本号 (标签号) 后版本号 (标签号))

      将本地仓库某一个标签推到远程仓库(git push origin 标签号)

      将本地仓库所有标签推到远程仓库(git push origin --tag)

      删除标签,先删除本地仓库的标签,再删除远程仓库标签(git push origin :refs/tags/版本号)

    团队合作

    • 集中式方式(和 SVN 类似)

      集中式方式

      步骤:

      • 负责人将团队成员添加项目开发者

      • 团队成员开发项目推送到远程仓库

      • 在提交之前要先从远程仓库拉取最新的提交(git pull)

      • 解决冲突提交到远程仓库(git add . git rebase --continue)

      • 再次推送到远程仓库

    • fork + Pull Requests 方式(推荐的方式)

      fork pull-requests

      步骤:

      • 每个人 fork 中央仓库项目
      • 推送到自己 fork 过的远程仓库(git remote add upstream 中央仓库的地址)
      • 拉取中央仓库的更新(git pull upstream master)
      • 完成某个功能发起 Pull Requests
      • 中央仓库所有者合并我们的 Pull Requests

    Git全局设置

        git config --global user.name "***"

        git config --global user.email "***@***.com"

    查看配置

        git config --list

    创建一个本地仓库

        git init

    克隆github上现有的仓库

        git clone [url]  可以在克隆仓库的时候自定义本地仓库的名字 git clone [url] name

    检查当前文件状态

        git status

        使用 git status -s 命令或 git status --short 命令,将得到一种更为紧凑的格式输出。新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。

    创建一个新的文件

        touch newfile.txt   或者使用   vim newfile.txt(详细指令见linux)

        echo 'My Project' >> newfile.txt 编辑文件

        cat newfile.txt  查看文件

        此时再次使用git status 命令能够看到一个未跟踪文件,需要使用git add命令将其纳入跟踪范围

    将工作区内容添加到暂存区进行跟踪

        git add newfile

    查看尚未暂存的文件更新了哪些部分

     git diff

    查看已暂存的文件将要添加到下次提交中的内容

        git diff --staged 或 git diff --cachedd

    提交更新(将暂存区的内容添加到本地仓库)

        git commit

    提交更新时添加说明

        git commit -m "added a new file named newfile"

    强制提交更新

        git commit -a

    移除文件

        如果只是手动或者在命令行使用rm从工作目录中删除文件,运行git status会发现该文件出现在未暂存清单。要从 git 中彻底移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。

        git rm newfile

        git commit -m "delete newfile"

    如果删除之前修改过并且已经放到暂存区域,但并没有提交,则必须要用强制删除选项 -f

        git rm -f newfile

    如果想把文件从 git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中(想让文件保留在磁盘,但是并不想让 git 继续跟踪)这时可以使用--cached

        git rm --cached newfile

    git rm 命令后面可以列出文件或者目录的名字,也可以使用glob模式(glob 模式是指 shell 所使用的简化了的正则表达式,也被称之为 shell 通配符)比如:

        git rm log/*.log 此命令删除 log/ 目录下扩展名为 .log 的所有文件。

    移动文件(常用来重命名)

        git mv oldname newname

    查看提交历史

        git log 按提交时间列出所有的更新

        git log --oneline 显示成一行

        git log --graph 显示成树形

        git log -p -2  -p 用来显示每次提交的内容差异, -2用来仅显示最近两次提交

        git log --stat  列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加

        git log --pretty=**** 指定使用不同于默认格式的方式展示提交历史,还可以利用format选项定制显示的格式,eg:git log --pretty=format:"%h - %an,%ar:%s" 还可以与--graph联用,显示ASCLL图形表示的分支合并历史。

    撤销操作

        git commit --amend

    重新提交前一次的提交,如果前一次提交有任何遗漏(少提交了几个文件,文件内内容有误,提交说明写错了等),你可以随时进行弥补或者更正,然后重新提交。这样会覆盖前一次提交的记录,但前一次的提交时间会保留。重新提交时,提交信息编辑器中可以看到上次的提交说明,可以编辑覆盖。

        git reset HEAD <file> 取消暂存的文件

        git checkout -- <file> 撤销对文件的修改

    远程仓库的使用

        git remote  查看远程仓库

        git remote -v  显示需要读写远程仓库使用的Git保存的简写与其对应的URL

        git remote add <shortname> <url>  将本地仓库与远程仓库建立联系,同时指定一个简写(shortname是的简写,作为远程仓库的名字)

        git fetch 远程仓库名  访问远程仓库,从中拉取所有你没有的数据。执行完成后你将拥有哪个远程仓库所有的分支引用,但不会自动合并或修改你当前的工作,必须手动合并

        git push 远程仓库名 分支名   将本地仓库中的文件推送到远程仓库

        git remote show origin   查看某个远程仓库的更多信息

        git remote rm username2    远程仓库的移除

        git remote rename username2 newname   远程仓库的重命名

    打标签

        git tag   列出标签

        git tag -l 'v1.8.5*'   使用特定模式查找标签

    创建标签:git使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)

    清量标签只是一个特定提交的引用,本质上是将提交校验和存储到一个文件中 - 没有保存任何其他信息。

    附注标签:存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签。

     附注标签(运行 tag 命令时指定 -a 选项)

        git tag -a 标签号 -m "备注"

        轻量标签(运行tag命令时不指定任何选项)

        git tag 标签号

        查看标签信息与对应的提交信息

        git show 标签号

        为历史提交打标签

        git tag -a 标签号 版本号 -m "备注"

        共享标签(推送标签到共享服务器)

        git push origin 标签号

        一次性推送多个标签(将所有不再远程服务器上的标签全部传送)

        git push origin --tags

    Git分支

        Git默认分支(主分支)名字时master

        分支创建

        git branch testing   git branch命令仅仅创建一个新分支,不会自动切换到新分支

        分支切换

        git有一个名为 HEAD 的特殊指针,指向当前所在的本地分支(项目默认初始分支为master,所以HEAD一开始是指向master分支的)

        使用 git log 命令查看各个分支当前所指的对象。 提供这一功能的参数是--decorate

        git log --oneline --decorate

        切换到一个已存在的分支,使用 git checkout 命令

        git checkout testing   这样HEAD就指向testing分支了

        利用checkout新建分支的同时切换到该分支

        git checkout -b testing2

        过HEAD指针切换不同的分支工作,项目就会产生分叉,使用 git log 命令查看分叉历史。 

        git log --oneline --decorate --graph --all  输出提交历史,各个分支指向以及项目的分支分叉情况

    查看分支

        查看本地分支

        git branch

        查看所有分支(包括远程分支)

        git branch -a

        查看本地分支最后一次提交

        git branch -v

    合并分支

    当我们在新建的工作分支上修复了bug或者加入了新的内容时,可以将其合并到主分支上,首先切换到主分支,然后利用git merge命令进行合并。

        git checkout master

        git merge testing

    删除分支

        git branch -d testing

    克隆指定分支

        git clone -b testing <url>

    删除远程分支

        git push --delete origin testing

    重命名本地分支

        git branch -m testing newtest

    解决本地仓库与远程仓库不一致问题

        pull远程仓库

        git pull origin

        和本地仓库合并

        git merge origin master

        提交

        git push origin master

       

  • 相关阅读:
    Interview with BOA
    Java Main Differences between HashMap HashTable and ConcurrentHashMap
    Java Main Differences between Java and C++
    LeetCode 33. Search in Rotated Sorted Array
    LeetCode 154. Find Minimum in Rotated Sorted Array II
    LeetCode 153. Find Minimum in Rotated Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 31. Next Permutation
    LeetCode 60. Permutation Sequence
    LeetCode 216. Combination Sum III
  • 原文地址:https://www.cnblogs.com/mxj961116/p/10321113.html
Copyright © 2011-2022 走看看