Git的基本概念与操作

版权声明:转载请附上博客地址,谢谢~ https://blog.csdn.net/ruren1/article/details/82025530

=============================基本操作=================================

一、linux安装git
    yum install git
二、拉取项目
    git clone https://github.com/sdwmbyy/test.git
三、查看状态
    git status
四、进入目录
    cd test
五、新建“日记”文件,添加一行“我今天吃了一个苹果“ ,添加完后退出
    vi 日记
六、查看状态:说明项目还没提交
    git status
    [root@localhost test]# git status
    # 位于分支 master
    # 未跟踪的文件:
    #   (使用 "git add <file>..." 以包含要提交的内容)
    #
    #       "\346\227\245\350\256\260"
    提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
七、为新添加的文件建立跟踪,并查看状态
    git add 日记
    [root@localhost test]# git add 日记
    [root@localhost test]# git status
    # 位于分支 master
    # 要提交的变更:
    #   (使用 "git reset HEAD <file>..." 撤出暂存区)
    #
    #       新文件:    "\346\227\245\350\256\260"
    #
七、提交,并添加描述,“我新增了一个日记文件”。
    git commit
    我新增了一个日记文件
    # 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
    # 说明将会终止提交。
    #
    # 提交者:   root <[email protected]>
    #
    # 位于分支 master
    # 要提交的变更:
    #   (使用 "git reset HEAD <file>..." 撤出暂存区)
    #
    #       新文件:    "\346\227\245\350\256\260"
    #
八、查看状态:说明项目已经得到提交
    git status

    我新增了一个日记文件
    # 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
    # 说明将会终止提交。
    #
    # 提交者:   root <[email protected]>
    #
    # 位于分支 master
    # 要提交的变更:
    #   (使用 "git reset HEAD <file>..." 撤出暂存区)
    #
    #       新文件:    "\346\227\245\350\256\260"
    #
    ~                                                                                                                    
    ~                                                                                                                    
    ".git/COMMIT_EDITMSG" 12L, 369C written
    [master a944d48] 我新增了一个日记文件
     Committer: root <[email protected]>
    您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确
    与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息:

        git config --global user.name "Your Name"
        git config --global user.email [email protected]

    设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:

        git commit --amend --reset-author

     1 file changed, 1 insertion(+)
     create mode 100644 "\346\227\245\350\256\260"
    [root@localhost test]# git status
    # 位于分支 master
    # 您的分支领先 'origin/master' 共 1 个提交。
    #   (使用 "git push" 来发布您的本地提交)
    #
    无文件要提交,干净的工作区
    

九、同步到GitHub
    git push
    Username for 'https://github.com': sdwmbyy
    Password for 'https://[email protected]': 输入自己的密码

=============================基本操作end=================================


=============================处理冲突=================================

如果两个人修改项目中某个文件的同一个地方,第二个人push的时候
就会发生冲突。如下提示
    [root@localhost test]# git push
    warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
    修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
    进行如下设置:

      git config --global push.default matching

    若要不再显示本信息并从现在开始采用新的使用习惯,设置:

      git config --global push.default simple

    参见 'git help config' 并查找 'push.default' 以获取更多信息。
    ('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
    为保持兼容,请用 'current' 代替 'simple' 模式)

    Username for 'https://github.com': [email protected]
    Password for 'https://[email protected]@github.com': 
    To https://github.com/sdwmbyy/test.git
     ! [rejected]        master -> master (fetch first)
    error: 无法推送一些引用到 'https://github.com/sdwmbyy/test.git'
    提示:更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外
    提示:一个版本库已推送了相同的引用。再次推送前,您可能需要先合并远程变更
    提示:(如 'git pull')。
    提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。

1.下拉项目进行冲突合并
    git pull
    [root@localhost test]# git pull
    remote: Counting objects: 3, done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
    Unpacking objects: 100% (3/3), done.
    来自 https://github.com/sdwmbyy/test
       7e802af..3eefd71  master     -> origin/master
    自动合并 我的大学
    冲突(内容):合并冲突于 我的大学
    自动合并失败,修正冲突然后提交修正的结果。
2.查看状态
    git status
    [root@localhost test]# git status
    # 位于分支 master
    # 您的分支和 'origin/master' 出现了偏离,
    # 并且分别有 1 和 1 处不同的提交。
    #   (使用 "git pull" 来合并远程分支)
    #
    # 您有尚未合并的路径。
    #   (解决冲突并运行 "git commit")
    #
    # 未合并的路径:
    #   (使用 "git add <file>..." 标记解决方案)
    #
    #       双方修改:     "\346\210\221\347\232\204\345\244\247\345\255\246"
    #
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
3.查看差别
    git diff
    [root@localhost test]# git diff
    diff --cc "\346\210\221\347\232\204\345\244\247\345\255\246"
    index 2928822,5ef8c68..0000000
    --- "a/\346\210\221\347\232\204\345\244\247\345\255\246"
    +++ "b/\346\210\221\347\232\204\345\244\247\345\255\246"
    @@@ -1,3 -1,3 +1,7 @@@
      这是的高尔基的一本著名的小说
    ++<<<<<<< HEAD
     +我初三的时候看过这本小说.
    ++=======
    + sdwmbyy:我没看过,是啊,我根本没有看过。
    ++>>>>>>> 3eefd71358ff0b9d3f092ab25b8569cf95dc5328
4.处理冲突,即选择哪个提交作为最终版本
    vi 我的大学
    [root@localhost test]# vi 我的大学

    这是的高尔基的一本著名的小说
    <<<<<<< HEAD
    我初三的时候看过这本小说.
    =======
    sdwmbyy:我没看过,是啊,我根本没有看过。
    >>>>>>> 3eefd71358ff0b9d3f092ab25b8569cf95dc5328
5.将我的大学文件的内容变为,即选择第二次提交作为最终版本
    这是的高尔基的一本著名小说
    我初三的时候看过这本小说.
6.查看状态
    git status
7.添加变更
    git add 我的大学
8.提交
    git commit
    我push时,我的大学有冲突,我的选择我的版本为最终版本
9.上传:
    git push

=============================处理冲突end=================================
    

=============================回到过去=================================
为什么要这么做:因为有些从Github上pull过来的项目可能被某些人改得面目全非。
因此,需要回到pull之前的版本上去。

1.查看日志,即之前进行了哪些提交
    git log
    commit 43a31f9c01833f807de3c899382ac3efec4f7536
    Merge: 50ac9da 3eefd71
    Author: root <[email protected]>
    Date:   Fri Aug 24 19:29:33 2018 +0800

    我push时,我的大学有冲突,我的选择我的版本为最终版本
    
    Conflicts:
        我的大学

    commit 50ac9dab5087bf2ca6be9daecfc50593e81a7684
    Author: root <[email protected]>
    Date:   Fri Aug 24 19:20:08 2018 +0800

        我曾经看过这本书

    commit 3eefd71358ff0b9d3f092ab25b8569cf95dc5328
    Author: root <[email protected]>
    Date:   Fri Aug 24 11:18:33 2018 +0000

        是啊,我确实没有看过哦。

    commit 7e802afd54390c2536a96790bf5131a207df7f3b
    Merge: 0387f38 8406b11
    Author: root <[email protected]>
    Date:   Fri Aug 24 11:09:27 2018 +0000

        Merge branch 'master' of https://github.com/sdwmbyy/test
        发生了冲突,我选择第二次修改的版本为最终版本。
        Conflicts:
        我的大学

    commit 0387f380aa7f959b67ad61535ee92a03c7395ebf
    Author: root <[email protected]>
    Date:   Fri Aug 24 10:53:02 2018 +0000

        HowardHub:这本小说还可以

    commit 8406b117f1636ba5c45645bf5355ec0f21672756
    Author: root <[email protected]>
    Date:   Fri Aug 24 18:51:16 2018 +0800

        我对“我的大学”进行了修改,

    commit 90bbf2566d175f9d186a15a3cd43bc115f96c351
    Author: root <[email protected]>
    Date:   Fri Aug 24 18:11:41 2018 +0800

        sdwmbyy:梨好吃。
2.根据某个时间点的coomit id,回到那个版本。hard代表了当前代码的版本的指针
    git reset --hard 7e802afd54390c2536a96790bf5131a207df7f3b
    
3.回到未来
    git reflog #列出当前版本号之前的版本
    [root@localhost test]# git reflog
    3eefd71 HEAD@{0}: reset: moving to 3eefd71358ff0b9d3f092ab25b8569cf95dc5328
    43a31f9 HEAD@{1}: commit (merge): 我push时,我的大学有冲突,我的选择我的版本为最终版本
    50ac9da HEAD@{2}: commit: 我曾经看过这本书
    7e802af HEAD@{3}: pull: Fast-forward
    8406b11 HEAD@{4}: commit: 我对“我的大学”进行了修改,
    90bbf25 HEAD@{5}: commit: sdwmbyy:梨好吃。
    7100f7b HEAD@{6}: pull: Merge made by the 'recursive' strategy.
    f7ee1f8 HEAD@{7}: commit: 新添加了一记文件“我的大学”
    a944d48 HEAD@{8}: commit: 我新增了一个日记文件
    e76129b HEAD@{9}: clone: from https://github.com/sdwmbyy/test.git

    git reset --hard 
    [root@localhost test]# git reset --hard 3eefd71
    HEAD 现在位于 3eefd71 是啊,我确实没有看过哦。
    
=============================回到过去end=================================

=============================建立里程碑==================================

点击项目名-->点击release-->点击Draft a new release-->输入里程碑相关信息-->
-->完成发布。
之后,如果这个版本有bug,就可以在此基础上进行修改。

=============================建立里程碑end=================================


=============================分支开发与合并==================================

1.使用场景:昨天发布的版本中,出现了一个bug,需要马上进行修复,而master分
支已经推送了新的功能代码,所以不能在master分支上进行立刻发布(如果发布,就会
把没有测试过的代码待到外面去,会有更多bug产生)。
2.解决办法:用已经发布的代码为基础,创建一个分支,对bug进行修改。修改完成后,把
它合并到正在开发的分支上。这样在不影响现有代码的情况下,对bug进行处理。
3.操作流程:新建分支-->修改bug-->将分支合并到master

=============================分支开发与合并end==================================


=============================其它经验==================================

1.多用网站和客户端,少用命令行
2.每次提交前,diff自己的代码,对diff部分进行仔细检查,避免提交错误的代码。
3.下班前,整理好自己的工作区。把要提交的代码提交,把不需要的代码删除。
4.并行项目,使用分支进行开发
5.遇到冲突时,要搞明白冲突的原因,不要随意丢弃别人的代码。
6.发布时,记得打tag,方便将来拉分支修bug

=============================其它经验==================================


 

猜你喜欢

转载自blog.csdn.net/ruren1/article/details/82025530