• Git和GitHub


    git简单命令

    git config --global user.email "自己邮箱"
    git config --global user.name "自己名字"

    git init 初始化,创建版本仓库

    不要使用windows的记事本来记录信息,最好用notepad++,设置默认编码为UTF-8

    git add 文件名  单个文件管理
    git add . 全部管理起来
    git commit -m ‘创建第一个版本说明’

    git diff 查看修改内容

    git status 查看当前文件夹状态

    git log 查看提交历史,方便回退到之前版本

    git log --pretty=oneline 一行显示日志

    git reflog 查看命令历史,方便回滚到未来版本

    git reset --hard 版本号 回滚到上一个版本

    git checkout -- file  把文件在工作区的修改全部撤销 (就是让这个文件回到最近一次git commit或git add时的状态。)

    1.一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

    2.一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    当我们在本地工作区删除了一个文件时候,工作区和版本库就不一致了,git status会显示文件被删除,如果的确并确定及肯定是无用要删除的文件,就执行git rm file 删除和git commit 提交

    如果是误删 git checkout --file

    本地Git推到GitHub

    本地Git库和GitHub是通过ssh加密进行传输

    第一步:确定本地是否有ssh目录,以自己windows笔记本为例,在C:Usersorion.ssh可以找到,然后确认里边是否有id_rsa(私钥:不可泄露给别人)和id_rsa.pub(公钥:可以告诉别人)这两个文件

    如果没有.ssh或者那两个文件  打开Git Bash创建ssh,命令如下:ssh-keygen -t rsa -C "youremail@example.com",直接一路回车用默认即可

    第二步:登陆GitHub,点击 Settings===》SSH and GPG keys===》New SSH key  填写标题并将id_rsa.pub内容填入下面===》Add SSH key 就完成秘钥添加

    将本地Git和GitHub做远程同步

    登陆GitHub右上角New repository填写Respository name 然后Create respository,完成创建一个Git库

    现在将本地的Git库推送到GitHub

    git remote add origin git@github.com:DemoRun/BBS.git

    DemoRun为GitHub的账户名   BBS为本地库

    添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

    下一步,将本地库的所有内容推送到远程库上:

    git push -u origin master

    推送成功后,可以在GitHub页面中看到远程库的内容已经和本地一模一样了

    从现在起,只要本地做了提交,就可以通过命令:git push origin master 把本地的master分支的最新修改推送到GitHub。

    克隆一个远程库到本地

    首先创建一个远程库

    将远程服务器克隆到本地

    git clone git@github.com:DemoRun/Test.git       DemoRun为GitHub账户名/Test.git为远程项目名

    分支

    创建一个dev分支,然后切换到dev分支

    $ git checkout -b dev
    Switched to a new branch 'dev'
    

    -b 相当于创建并切换到分支,相当于以下两条命令

    $ git branch dev
    $ git checkout dev
    Switched to branch 'dev'  

    查看分支(当前分支会有*号)

    git branch
    * dev
      master

    在分支里边添加一个文件并提交,然后再切换到master分支(这时候在master下会看不到添加的文件),我们需要合并分支

    $ git merge dev
    Updating d8bf1a4..de568bc
    Fast-forward
     new5.txt | 1 +
     1 file changed, 1 insertion(+)
     create mode 100644 new5.txt  

    这时候就能够在master分支上看到在dev新添加的文件了,合并完成后,就可以放心删除dev分支了(强制删除用-D)

    $ git branch -d dev
    Deleted branch dev (was de568bc).  

    工作原理如图:

    解决合并分支冲突

    首先可以创建个新分支,并且在里边做文本并提交。然后切换到master上在文本上再次做修改,再次提交,这时候就会出现冲突问题。

    $ git add new.txt 
    $ git commit -m "& simple"
    [master 5dc6824] & simple
     1 file changed, 1 insertion(+), 1 deletion(-)
    

    这是此时的状态,两次修改无法合并统一,git status可以看到文件存在冲突

    查看修改的文件new.txt  在里边Git通过<<<<<,======,>>>>>>会标记不同分支内容,将修改的部分手动修改给他进行统一,再次提交解决冲突问题。

    这是修复后的分支状态,查看日志也可以看到合并情况,最后删除分支。

    普通模式进行合并 

    以上都是用Fast forward进行的合并,看不出曾经做过合并,这时候使用普通合并能够看到合并后的历史。使用--no-ff参数实现普通合并

    git merge --no-ff -m "merge with no-ff" dev
    

    BUG分支处理  

    当出现bug需要处理,但是当前dev工作还没有提交时候,使用stash功能,将当前工作现场“存储”,以后恢复后再继续工作

    $ git stash
    Saved working directory and index state WIP on dev: eb083b3 1

    假定要从master分支上修改,就从master上创建分支:

    $ git checkout master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 12 commits.
      (use "git push" to publish your local commits)
    
    orion@DESKTOP-UCUQ02V MINGW64 /d/GitHub/Test (master)
    $ git checkout -b issue-01
    Switched to a new branch 'issue-01'  

     修复完bug进行提交操作

    orion@DESKTOP-UCUQ02V MINGW64 /d/GitHub/Test (issue-01)
    $ git add .
    
    orion@DESKTOP-UCUQ02V MINGW64 /d/GitHub/Test (issue-01)
    $ git commit -m 'fix bug01'
    [issue-01 d151370] fix bug01
     1 file changed, 1 insertion(+), 1 deletion(-)  

    修复完成后切换到master目录下,进行合并,最后删除issue-01

    orion@DESKTOP-UCUQ02V MINGW64 /d/GitHub/Test (master)
    $ git merge --no-ff -m 'merge fix bug 01' issue-01
    Merge made by the 'recursive' strategy.
     new5.txt | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    $ git branch -d issue-01

    这时候会到dev继续未完成工作

    使用git stash list查看

    $ git stash list
    stash@{0}: WIP on dev: f52c633 add merge  

    恢复工作区:

    1.使用git stash apply stash@{0}恢复,然后使用git stash pop来删除list列表内容

    2.使用git stash pop,恢复的同时把stash内容一并删除

    多人协作

    查看远程库信息:git remote,默认是origin

    $ git remote
    origin  

    使用git remote -v显示详细信息:一般可以看到抓取和推送的origin地址,除非没有权限,看不到push地址

    $ git remote -v
    origin  git@github.com:DemoRun/Test.git (fetch)
    origin  git@github.com:DemoRun/Test.git (push)  

     推送分支,将本地分支推送到远程库,要指定本地分支

    $ git push origin master  

    当多人一起开发时候会推送不同版本的分支,这时候如果你也推送分支,会提示错误,有冲突,这时候需要先git pull把最新提交的从origin/dev抓取下来,在进行本地合并,解决冲突在推送:

    $ git pull
    There is no tracking information for the current branch.
    Please specify which branch you want to merge with.
    See git-pull(1) for details.
    
        git pull <remote> <branch>
    
    If you wish to set tracking information for this branch you can do so with:
    
        git branch --set-upstream-to=origin/<branch> dev  

    如果提示以上  no tracking information 则证明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

    如果合并有冲突,解决冲突,并在本地提交

    解决掉冲突或者没有冲突后再git push origin <branch-name>推送就能成功

    $ git push origin dev
    Counting objects: 6, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (6/6), 621 bytes | 621.00 KiB/s, done.
    Total 6 (delta 0), reused 0 (delta 0)
    To github.com:michaelliao/learngit.git
       7a5e5dd..57c53ab  dev -> dev
    

      

    使用rebase将提交历史分支线整理为一条直线

    git rebase
    
    git log

    git log --pretty=oneline --abbrev-commit

      

    标签管理

    可以给分支打上标签,方便查看(标签与commit是挂钩的)

    在Git中找到需要打标签的分支,使用git tag <name>打上标签,还可以创建带描述的标签用 -a 指定标签名,-m 指定描述信息,同时也可以对之前历史版本做标签,在后边加上版本号

    $ git tag v1.0
    
    $ git tag -a v0.1 -m "version 0.1 released" 1094adb  

    查看标签和查看标签描述

    $ git tag
    
    $ git show <tagname>  tagname为自己之前定的版本号 如v1.0  

    推送标签到远程

    $ git push origin <tagname>   tagname为版本号
    
    $ git push origin --tags   一次性推送所有标签到远程  

    删除标签

    $ git tag -d v0.1        删除本地标签
    
    $ git push origin :refs/tags/v0.9        删除远程标签(先删除本地标签)
    

     

     

  • 相关阅读:
    【模拟】Gym
    【二分】【半平面交】Gym
    【凸包】【三分】Gym
    【字符串哈希】【哈希表】Aizu
    【思路】Aizu
    【树状数组】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) C. DNA Evolution
    【构造】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) B. High Load
    【贪心】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) A. String Reconstruction
    【模拟退火】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem F. Factory
    【动态规划】【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem B. Dissertation
  • 原文地址:https://www.cnblogs.com/CrazyDemo/p/10613574.html
Copyright © 2020-2023  润新知