• Git基本命令


    GIT 服务器端:

    git init --bare someRepo.git

    获取master,此时客户端是没有代码的:(--bare 只克隆其仓库,不克隆工作空间)

    git clone ssh://userName@so.me.i.p/path/to/repo/someRepo.git

    追加代码,并且提交代码:

    1 查看当前代码状态

    git status

    -----------------------------------------------

    位于分支 master

    初始提交

    未跟踪的文件:
    (使用 "git add <文件>..." 以包含要提交的内容)

    test.java

    提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

    2 跟踪代码

    git add

    ----------------------------------------------

    此时没有任何效果

    ----------------------------------------------

    git status

    ----------------------------------------------

    位于分支 master

    初始提交

    要提交的变更:
    (使用 "git rm --cached <文件>..." 以取消暂存)

    新文件: test.java

    3 确认提交代码

    git commit -m 'some comment'

    ---------------------------------------------

    [master (根提交) fc307fb] some comment
    1 file changed, 1 insertion(+)
    create mode 100644 test.java

    4.1 推送代码到服务器

    git push

    ---------------------------------------------

    voctrals@192.168.1.101's password:
    对象计数中: 3, 完成.
    写入对象中: 100% (3/3), 224 bytes | 0 bytes/s, 完成.
    Total 3 (delta 0), reused 0 (delta 0)
    To ssh://voctrals@192.168.1.101/home/voctrals/GitStudy/gitstudy.git
    * [new branch] master -> master

    4.2推送本地分支到远程服务器

    git push [-u] origin branch1    -- -u的意思是说提交之后立即关联,这个参数只有第一次提交的时候有意义,后面不应该存在

    ------------------------------------

    voctrals@192.168.1.101's password: 
    Total 0 (delta 0), reused 0 (delta 0)
    To ssh://voctrals@192.168.1.101/home/voctrals/GitStudy/gitstudy.git
    * [new branch] branch1 -> bran[]h1

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

    ------------------------------------

    origin/branch1
    origin/master

    回退到某一个版本号:

      http://blog.csdn.net/pzhtpf/article/details/52212671

    创建分支

    1 查看分支

    git branch  -- 查看本地分支

    -----------------------------------

    * master  -- *代表当前所在分支

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

    ---------------------------------

    origin/master

    git branch -a --查看所有分支

    -------------------------------

    * master
    remotes/origin/master

    2 创建分支

    git branch branch_name

    ---------------------------------

    什么效果也没有

    或者

    git checkout -b branch_name

    -------------------------------------

    创建一个branch_name本地分支,创建分支之后,直接把指针指向新的分支

    git branch  -- 查看分支创建情况,多出来一个新创建的分支branch1

    --------------------------------

    branch1
    * master

    切换分支,切换分支的时候,本地的代码是会跟着切换的

       当前在branch1上对代码的修改,当切换到branch2的时候,代码也是修改过的.当然前提是没有提交到本地服务器,不然的话代码已经和一个分支挂上关系了.

       × 对文件进行了任何修改,修改并不属于任何一个分支

       × 对文件的add,也不属于任何一个分支

       × 对文件的提交是针对于一个分支的

    git checkout branch_name

    -------------------------------------

    切换到分支 'branch1'

    or

    切换到分支 'master'
    您的分支与上游分支 'origin/master' 一致。

    切换分支提交代码

    1 git status

    2 git add 

    3 git commit

    4 git pull

    -------------------------------------------------

    voctrals@192.168.1.101's password: 

    当前分支没有跟踪信息。
    请指定您要合并哪一个分支。
    详见 git-pull(1)。

    git pull <remote> <branch>

    如果您想要为此分支创建跟踪信息,您可以执行:

    git branch --set-upstream-to=origin/<branch> branch1

    根据提示信息,可以了解到,我们这个分支尚未被跟踪,所以先让该分支被跟踪一下

    4 git branch --set-upstream-to=origin/branch1 branch1  -- 让当前分支被跟踪

    -----------------------------------------

    还是没有什么效果

    5 git push

    -----------------------------------------

    voctrals@192.168.1.101's password:
    对象计数中: 3, 完成.
    Delta compression using up to 4 threads.
    压缩对象中: 100% (3/3), 完成.
    写入对象中: 100% (3/3), 313 bytes | 0 bytes/s, 完成.
    Total 3 (delta 0), reused 0 (delta 0)
    To ssh://voctrals@192.168.1.101/home/voctrals/GitStudy/gitstudy.git
    fc307fb..56e5e89 branch1 -> branch1

    6 git status

    -----------------------------------

    位于分支 branch1
    您的分支与上游分支 'origin/branch1' 一致。
    无文件要提交,干净的工作区

    7 查看两个分支的本地代码

    voctrals@E420:~/gitstudy/gitstudy$ git checkout master
    切换到分支 'master'
    您的分支与上游分支 'origin/master' 一致。
    voctrals@E420:~/gitstudy/gitstudy$ ls
    test.java
    voctrals@E420:~/gitstudy/gitstudy$ git checkout branch1
    切换到分支 'branch1'
    您的分支与上游分支 'origin/branch1' 一致。
    voctrals@E420:~/gitstudy/gitstudy$ ls
    test2 test.java

    获取远程的,本地不存在的分支

    git checkout branch1

    直接获取某一个分支,本地还没有git仓库

    git clone -b branchName ssh://someUser@so.me.i.p/path/to/repo/someRepo.git

    删除本地分支(不能删除所在的分支)

    git branch -d branchName 

    ------------------------------------------------

    warning: 将要删除的分支 'branch1' 已经被合并到
    'refs/remotes/origin/branch1',但未合并到 HEAD。
    已删除分支 branch1(曾为 56e5e89)。

    git branch -D branchName  -- 当一个分支没有被合并到别的分支的时候,是不能删除的,可以换参数d为D即可。

    -- 此功能适合那种试验性的小分支,实验结果不正常,或者实验取消的时候,删除分支

    删除远程分支(有两种方式,不知道区别)

    git push origin :branchName

    ---------------------------------------------------

    voctrals@192.168.1.101's password:
    To ssh://voctrals@192.168.1.101/home/voctrals/GitStudy/gitstudy.git
    - [deleted] branch1

    或者

    git branch -r -d origin/branch1

    ----------------------------------------------

    已删除远程跟踪分支 origin/branch1(曾为 fc307fb)。

    删除本地修改

    git status

    -------------------------------------------

    如果发现本地有不需要的修改,可以直接把当前代码恢复,使用checkout命令

    git checkout -- file_name_with_path

    ------------------------------------------

    voctrals@E420:~/ideaworkspace/oetcm$ git status
    位于分支 chatroom-2.0
    尚未暂存以备提交的变更:
    (使用 "git add <文件>..." 更新要提交的内容)
    (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改: oetcm-service/src/main/java/com/mz/mycc/service/PublicCourseService.java
    修改: oetcm-service/src/main/resources/sql/AccountMapper.xml

    未跟踪的文件:
    (使用 "git add <文件>..." 以包含要提交的内容)

    oetcm-api/oetcm-api.iml
    oetcm-api/src/main/resources/doc/apidoc/
    oetcm-api/target/
    oetcm-service/oetcm-service.iml
    oetcm-service/target/
    oetcm-util/oetcm-util.iml
    oetcm-util/target/

    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
    voctrals@E420:~/ideaworkspace/oetcm$ git checkout -- oetcm-service/src/main/java/com/mz/mycc/service/PublicCourseService.java
    voctrals@E420:~/ideaworkspace/oetcm$ git checkout -- oetcm-service/src/main/resources/sql/AccountMapper.xml

    分支合并

    git merge branchName   -- 将制定分支的内容合并到当前分支

    -------------------------------------------------

    Updating d17efd8..fec145a
    Fast-forward
     readme.txt |    1 +
     1 file changed, 1 insertion(+)

     合并分支可能会失败,失败的时候,git会提示那些文件合并的时候失败了,需要自己去合并之后的文件中进行适当的修改。

    OK,修改之后这个文件是未被跟踪的,所以需要再次add,commit

    将一个分支中的部分内容合并到另外一个分支

    voctrals@E420:~/ideaworkspace/oetcm$ git branch                     -- 获取当前所有分支
    chatroom-2.0
    * master
    voctrals@E420:~/ideaworkspace/oetcm$ git checkout chatroom-2.0           -- 需要追加文件的分支
    切换到分支 'chatroom-2.0'
    您的分支与上游分支 'origin/chatroom-2.0' 一致。
    voctrals@E420:~/ideaworkspace/oetcm$ git checkout master .gitignore               -- 需要获取文件的分支,这里还需要指定需要的文件
    voctrals@E420:~/ideaworkspace/oetcm$ git status
    位于分支 chatroom-2.0
    您的分支与上游分支 'origin/chatroom-2.0' 一致。
    要提交的变更:
    (使用 "git reset HEAD <文件>..." 以取消暂存)

    新文件: .gitignore

    标签相关

    1 当前提交创建标签

    git tag tag_name --没有任何副作用

    2 查看所有标签

    git tag

    -------------------------------------------------

    apple
    pear

    3 创建有备注的标签

    git tag -a tag_name -m 'comment' -- 没有任何副作用

    4 给过去的一次commit追加标签

    git tag -a tag_name -m 'comment' commit_id

    5 删除标签

    git tag -d tag_name

    6 推送标签到远程

    git push origin tag_name

    git push origin --tags

    7 删除远程标签

    git tag -d some_tag_name            -- 先删除本地的tag

    git push origin :refs/tags/some_tag_name             -- 推送本地的删除到远程

    8 获取指定tag处的代码

    git checkout tag_name

    这里有两种情况:

    8-1, 如果checkout的这个tag,存在分支,那么直接checkout没有什么问题

    记录一下,这里写的有问题,即使存在分支,也需要新建一个分支,下一步应该是去合并新建的分支和当前分支.

    8-2,如果checkout的这个tag,不存在对应的分支,会有如下提示

    voctrals@E420:~/gitstudy/gitstudy.git$ git checkout apple 
    Note: checking out 'apple'.

    You are in 'detached HEAD' state. You can look around, make experimental
    changes and commit them, and you can discard any commits you make in this
    state without impacting any branches by performing another checkout.

    If you want to create a new branch to retain commits you create, you may
    do so (now or later) by using -b with the checkout command again. Example:

    git checkout -b <new-branch-name>

    HEAD 目前位于 1d61572... create readme file

    这时,我们只需要git checkout -b new_branch_name tag_name即可.

    fetch

    ignore

    临时存储

    git stash -- 当分支需要切换的时候,当前分支有些内容不适宜提交的时候,可以先存储下来当前add的所有的东西,以保证当前分支是clean的

    -------------------------------------------

    保存工作目录和索引状态 WIP on dev: 8c6f380 after merge
    HEAD 现在位于 8c6f380 after merge

    git checkout someBranch -- 切换到需要对应的分支

    git checkout -b bug-001 -- 切换出来一个分支,用来修复bug,add,commit等

    git checkout someBranch -- 切换回原来的分支

    git merge bug-001 -- 合并分支

    --------------------------------------------

    git checkout beforeBranch  -- 切换到原来的分支

    git stash list -- 查看当前的所有存储的修改列表

    ---------------------------------------------

    stash@{0}: WIP on dev: 8c6f380 after merge
    stash@{1}: WIP on dev: 8c6f380 after merge

    ---------------------------------------------

    git stash apply stash@{0}  -- 把储存的修改拿出来,但是这种形式,存储列表中仍会保存当前修改

    git stash drop stash@{0}  -- 把储存的修改从列表中删除

    ---------------------------------------------

    git stash pop stash stash@{0} -- 这种形式会将存储的修改取出来的同时,把列表中的内容删除掉

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

    git server 换地址

    $ git remote set-url origin <new url>

    Or modify your .git/config file.

    After modified URL, it will be worked as before.

    To Check remote URL, uses below command.

    $ git remote -v

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

    推送本地新项目到远程

    需要首先在远程上创建一个git项目

    mkdir someproject.git

    cd someproject.git

    git init --bare

    这样就OK了。获取一下远程的url,一般为ssh://git@some.ip/somepath/someproject.git

    在本地创建一个git项目,之后,

    git remote add origin ssh://git@some.ip/somepath/someproject.git

    之后就同上了

    切换库,或者其它的原因导致服务器坏掉了,可以把本地的代码放到新的库上:

    # 先和远程仓库合一下,后面的操作就一样了
    git pull origin master --allow-unrelated-histories

    git不显示中文路径

    git config --global core.quotepath false

    git pull 替换为 git fetch + git merge

    git fetch origin master
    git log -p master..origin/master
    git merge origin/master

    1,clone远程代码,只是把master弄下来,出现两个指针,一个指向master,一个指向origin/master。

     2,远程被人提交,远程master前移,本地修改只是master指针前移,origin/master指针不动

    3,fetch远程master分支到本地,origin/master指针前移

  • 相关阅读:
    【代码笔记】iOS-传身份证号码可返回生日字符串
    【代码笔记】iOS-抽屉效果的实现
    【代码笔记】iOS-旋转的图片
    【代码笔记】iOS-城市plist
    【代码笔记】iOS-侧滑效果
    【代码笔记】iOS-饼图
    【代码笔记】iOS-标题2个图标,点击的时候,页面跳转
    【代码笔记】iOS-GTMBase64
    【代码笔记】iOS-背景色随机显示
    【代码笔记】iOS-按钮带下划线的写法
  • 原文地址:https://www.cnblogs.com/voctrals/p/4968299.html
Copyright © 2020-2023  润新知