git

作者: 金刚_30bf | 来源:发表于2018-09-05 21:56 被阅读0次

    本地仓库创建

    仓库,即版本库,英文为repository 。
    只有在仓库中的目录和文件才可以被管理起来。

    cd  somedir
    git  init
    

    这样就创建了一个仓库 , 此时目录下会有个.git的隐藏目录,其是用来管理追踪版本的。

    向仓库中添加文件

    在仓库中创建文件 。 此时文件状态是 未track的、unstaged的。
    使用命令 git add 文件 来添加文件 。 此时文件状态是staged的。

    使用命令 git commit -m “xxx” 来提交文件, -m后的内容是注释。

    远程仓库关联

    到目前为止, git提交的文件还只是在本地仓库, 要提交到远程仓库,需要关联远程仓库,如github 、gitlab、国内的码云。

    1. 在远程仓库创建仓库。 https://github.com/coodajingang/gittest.git
    2. 使用git remote命令关联远程仓库 , origin 是远程仓库的默认名称。
    git remote add origin https://github.com/coodajingang/gittest.git
    
    3.  使用git push命令将本地仓库内容推送到远程仓库 ,-u参数用来将本地master 与 origin master分支关联起来,后续使用方便。
    git push -u origin master 
    

    在本地工作区修改文件后, 使用git commit 提交文件 ,此时更改只在本地仓库,还未同步到远程仓库, 需要 再用git push 来提交到远程仓库 。

    直接从远程仓库clone

    cd  otherdir
    git clone https://github.com/coodajingang/gittest.git
    

    cd到本地空目录, 然后使用git clone , 这样会生成一个新的本地目录 。

    文件各种状态

    分支管理

    1. 查看当前的分支
    PS E:\D\Program\git> git branch
    * dev
      master
    
    1. 切换分支
    PS E:\D\Program\git> git checkout master
    Switched to branch 'master'
    Your branch is up to date with 'origin/master'.
    
    1. 创建分支
    PS E:\D\Program\git> git branch dev2 
    后面使用 git checkout dev2 来切换分支。
    

    创建并切换分支:

    PS E:\D\Program\git> git checkout -b dev3
    Switched to a new branch 'dev3'
    
    1. 分支提交到远程仓库
      首先切换到相应的分支下, 然后使用 git push 提交 。

    git push origin <branch-name> 向远程仓库提交branch-name分支。

    若远程仓库的分支版本比本地新,则会报错,提示需要合并处理冲突。
    使用 git pull origin <branch-name> 从远程仓库down分支,会触发自动merge的过程,有冲突则进行冲突解决,见下面。

    在git pull时,可能会报错,因为远程分支没有与本地仓库分支进行映射,这时需要先进行映射 :
    git branch --set-upstream-to=origin/<branch-name> localbranchname
    或者
    git branch --set-upstream branch-name origin/branch-name .

    建议在创建分支时就进行映射:
    git checkout -b branch-name origin/branch-name

    1. 分支合并
      使用merge 将一个分支合并到另外一个分支上 。
    PS E:\D\Program\git> git merge dev2
    Updating 356c452..57af054
    Fast-forward
     test2.txt | 1 +
     1 file changed, 1 insertion(+)
    PS E:\D\Program\git>
    PS E:\D\Program\git> git status
    On branch master
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
    
    nothing to commit, working tree clean
    PS E:\D\Program\git>
    
    1. 冲突解决
      当merge时,可能会有分支冲突 , 这时需要手工进行解决 。

    2. 分支删除
      git branch -d dev2

    3. 查询分支图形化
      git log --graph --pretty=oneline --abbrev-commit

    4. stash
      git stash 命令将当前未commit的工作暂时保存起来,从而可以切换到其他分支进行工作,这在需要紧急修复bug时, 而当前的工作未完成不想进行一次脏commit时特别有用。

    使用git stash list 来查看当前stash的内容。
    使用 git stash pop 或 apply 来装载暂存的内容继续工作。

    命令

    1. 远程仓库 , git自动将本地的master 与 远程仓库的master对应起来, 远程仓库的默认名称为origin 。
      查看远程仓库信息使用 git remote
    PS E:\D\Program\git> git remote
    origin
    PS E:\D\Program\git> git remote -v
    origin  https://github.com/coodajingang/gittest.git (fetch)
    origin  https://github.com/coodajingang/gittest.git (push)
    
    1. rebase
      在向远程仓库push代码时,会报错:
     ! [rejected]        master -> master (fetch first)
    error: failed to push some refs to 'https://github.com/coodajingang/gittest.git'
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. You may want to first integrate the remote changes
    hint: (e.g., 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    

    因为在我们提交时, 远程仓库的版本发生了变化, 这时我们可以使用git pull 下载最新的版本进行合并操作,然后push , 但是此时会发现git log 显示的分支上不是一条直线, 这时可以使用 git rebase , 分支上版本提交的是一条直线。

    git rebase ,即将本次新提交基于新的版本来提交,但有个前提就是没有文件冲突,有冲突时还要进行冲突解决 。

    回退版本

    本地仓库使用 :
    git reset --hard HEAD^
    其中HEAD^ 表示上一个版本, HEAD^^ 表示上上一个版本 ,也可以使用 HEAD~10 表示上10个版本。

    然后进行远程回滚:
    git push origin branch-name -f

    -f 参数为强制提交 , 不加则会让本地进行合并。

    gitignore

    在本地创建.gitignore文件可以忽略文件或文件夹。
    1、在.gitignore文件中还可以使用通配符,例如,*.log,去掉.gitignore同一文件夹中的所有后缀名为log的文件。GitHub上提供了一份常用的忽略规则,大家可以拿来参考,详见此处:https://gist.github.com/octocat/9257657

    2、如果.gitignore忽略规则创建于文件提交代码库之后,则.gitignore规则不会影响目前所提交的文件(不会自动把文件从服务器端删除掉)。你需要手动删除,用如下的方式:
    git rm --cached <FILENAME>
    <FILENAME>即你要移除的文件全名。

    1. git commit
    2. git push

    则 本地和 服务器端仓库都会删除掉相应文件 。

    相关文章

      网友评论

          本文标题:git

          本文链接:https://www.haomeiwen.com/subject/ynczwftx.html