zoukankan      html  css  js  c++  java
  • git常用命令行

    一、git安装之后的先配置环境变量

    1 git version #查看git的版本

    1 git config --global user.name "vhjmhk" #设置全局使用者名称
    2 git config --global user.email "vhjmhk@163.com" #设置全局使用者邮箱
    cat ~/.gitconfig #可以去家目录的.gitconfig 文件里面查看git的配置


    二、git建立仓库

    1 git init #初始化一个新的git仓库,默认初始化一个master 的分支

    1 git status #查看git仓库状态

    提示存在一个没有路径的文件test.sh,git不知道该如何去去处理这个新文件,master隔壁多了一个*,git提示可以使用 git add <file>... 命令来添加这个文件

    1 git add test.sh #可以将新文件暂存起来
    2 git add -A #一次将目录下所有的文件缓存起来

    提示产生了一个新文件test.sh,git提示可以使用 git rm --cached <file>... 来删除缓存区的文件

    1 git rm --cached test.sh #可以把缓存区的文件删除

    1 git commit -m 'annotation' #将缓存区的文件提交到本地的git仓库中,-m后面跟此次改动的注释

    而且*也随之消失

    1 cat .git/index #git缓存区的文件保存记录

    1 git remote add origin https://github.com/vhjmhk/git-tutorial.git #连接到远端的github仓库(http的方式),默认远端的仓库的名字为origin(约定俗成的名字)
    2 git remote -v #查看已连接的远端仓库,我们可以fetch,push来推和拉

    1 git push origin master -u #将本地的git仓库里面保存的文件

    git push 远端仓库名字 分支
    -u是设置成默认的远端仓库,下次要使用的时候,直接使用 git push 即可
    有时候需要输入密码,可以做ssh免密校验

    1 git push origin feature1 #可以将feature1分支保存到远端的仓库上
    2 git push origin feature1:f1 #将feature1分支在远端保存为f1分支
    3 git push origin :feature1 #删除远端feature1分支

    1 git clone https://github.com/vhjmhk/git-tutorial.git git-clone #从远端的GitHub仓库克隆一个库下来,并设置本地库名为git-clone,不输入库名,默认和远端库名字一样,即git-tutorial

    git checkout -- <file>... 将文件还原到上一个状态

    修改文件并传到远端仓库

    git pull 拉取到远端的代码,将远端库的代码拉取到本地

    1 git pull origin master

    三、git分支操作

    git branch feature1 #建立一个名字是feature1的分支,名字可以自己起

    1 git checkout feature1 #切换到feature1的分支里面

    1 git checkout -b feature2 #在分支一里面创建一个新的分支,并切换到新的分支里面去

    1 git branch -d feature2 #删除一个feature2的分支


    因为feature2里面还有新文件没有同步到master里面,所以git不允许我们删除feature2分支,也可以使用  git branch -D feature2  来强制删除,一般在git里面都是比较慎重的选项

     git merge feature2  将feature2分支的文件合并到master(当前分支里面)将master的指针指向feature2

     

    四、git合并

    1 git log #查看git的操作日志

    --oneline 以一行的形式来显示,看起来比较短小
    git log --oneline -3 只输出前3行的数据

    1 git show 1333068 #查看某一次修改的具体操作

    常用的可视化管理log参考:https://stackoverflow.com/questions/1057564/pretty-git-branch-graphs

    可视化来管理log
    在~/.gitconfig 文件里面加入别称

    root@controller01 ~/git-tutorial [master]
    ± # cat~/.gitconfig
    [user]
    name = vhjmhk
    email = vhjmhk@163.com
    [alias]
    lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
    lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
    lg = !"git lg1"
    dog = log --all --decorate --oneline --graph

    使用  git lg /git lg1 

    使用  git lg2 

    使用  git dog 

     


    git merge feature1 使用merge的方式来合并的时候,默认使用Fast-forward,不会产生新的分支,前提是没有冲突
    可以使用  git merge feature1 --no-ff  会创建一个新的合并节点,在我们合并的同时产生一个新的commit的提交,可以保持原有的开发分支,整个提交链的完整性。会产生一个新的分支,可以看到比较完整的先后路径

    git rebase 将feature分支移动到到master分支的最后一次提交,把master最后的操作同步过来,使用rebase可以持续的保持一条竖线,保持整洁,但是会带来一些安全和可跟踪性问题。

    注:绝对不要在公共的master分支上使用rebase

    merge是一个合并操作,它会将两个分支的修改合并在一起,默认中是不会提交合并中修改的内容的,merge的提交历史会被记录,注重的是提交记录的真实性。
    rebase是没有合并操作的,他只是将当前分支的修改复制到目标分支的最后一次提交上面,关注点是开发的过程,rebase的log可以反应这个过程发生了什么
    可能使用merge会多一些

    分支冲突


    可以使用 git mergetool 

    推荐使用 vimdiff 来进行比较

    修改完成后

    a.txt.orig 是冲突产生时的临时文件,不需要保存
    提交修改并查看log

    会产生一些弯曲的线条
    实际情况下,其实合并其实还是会使用工具完成的

    五、Git回滚和撤销

    在提交操作完成之后,突然又不想要这个文件,想回到上一个版本的状态

     git reset master^  将git仓库回归到上一次的版本的状态,回退两次可以使用  git reset master^^  ,回退n次,可以使用  git reset master~n  ,可以回到前n次,这属于相对撤销的方式,也可以使用  git reset --hard HEAD^  功能一样

    文件依然存在,但是没有被git托管

    git reset 7f0abc2 在后面加版本号可以回到该版本,这属于绝对撤销


    常用的选项
    --soft 这个模式下的reset,工作目录和暂存区的文件都不会被丢弃,只是移动了commit指针而已
    --mixed 这个模式会把暂存区的文件丢弃,但不会动到工作目录的文件
    --hard 这个模式下,工作目录以及暂存区的文件都会被丢弃

     git reflog  还可以查看之前回退之前的版本(在git log里面看不见),在回退之后,还可以再次回退到回退之前的版本

    git revert 可以撤销某次操作,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交。

    使用  git log  查看日志

    产生新的注释

    git revert 撤销某次操作,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交。git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。相比 git reset,它不会改变现在的提交历史。
    在master的分支上应该使用revert,将记录保留下来,可以回溯。
    在自己的分支上,可以使用reset来直接回退。

    六、ignore和fork


    有一些.idea、.settings和.classpath 等无用的硬盘配置文件、编译生成的中间文件、可执行文件、敏感的配置文件和本地不想提交的脚本文件,都不需要同步,需要忽略掉它
    先创一个 .gitignore 文件
    在里面写入你要忽略文件的条件,而且你要忽略的文件不可以被git托管,如果被托管你需要手动撤销掉

    https://www.gitignore.io/ 可以自动生成 .gitignore 文件,输入相应的语言(如:java、python)即可生成相应的,应当忽略的文件

    1 git remote add upstream https://github.com/jobbole/awesome-java-cn.git #设置上游仓库
    2 git fetch upstream (分支) #将远端的上游仓库的某一个分支的代码拉到本地,默认是master分支

    pull = fetch + merge pull会自动合并

    1 git branch -r #可以查看远程的分支upstream/master
    2 git rebase upstream/master #要更新远端fork仓库的数据,没有自己的修改,只用rebase就够了,如果你有自己的贡献,就需要使用merge来合并分支

    七、GitHub的ssh免密推送

    官方文档
    https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#adding-your-ssh-key-to-the-ssh-agent

    1. 开启终端

    2. 粘贴下面的文本,替换您的GitHub电子邮件地址。

      $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

      这将使用提供的电子邮件作为标签创建一个新的ssh密钥。

      > Generating public/private rsa key pair.
    3. 系统提示您“输入要保存密钥的文件”时,按Enter键。使用默认文件位置。

      > Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]
    4. 在提示符下,键入安全密码。其实可以不使用密码,有一些应用可能需要写入密码

      > Enter passphrase (empty for no passphrase): [Type a passphrase]
      > Enter same passphrase again: [Type passphrase again]

    将SSH密钥添加到ssh-agent

    在将新的SSH密钥添加到ssh-agent以管理密钥之前,您应该检查现有的SSH密钥生成新的SSH密钥

    1. 在后台启动ssh-agent。

      $ eval "$(ssh-agent -s)"
      > Agent pid 59566
    1. 将SSH私钥添加到ssh-agent。如果使用其他名称创建密钥,或者要添加具有不同名称的现有密钥,请将命令中的id_rsa替换为私钥文件的名称。

      $ ssh-add ~/.ssh/id_rsa
    2. 将公钥里面的文件复制到GitHub的新建ssh选项中
  • 相关阅读:
    PATA 1071 Speech Patterns.
    PATA 1027 Colors In Mars
    PATB 1038. 统计同成绩学生(20)
    1036. 跟奥巴马一起编程(15)
    PATA 1036. Boys vs Girls (25)
    PATA 1006. Sign In and Sign Out (25)
    读取web工程目录之外的图片并显示
    DOS命令
    java连接oracle集群
    servlet
  • 原文地址:https://www.cnblogs.com/nobushi/p/10751052.html
Copyright © 2011-2022 走看看