zoukankan      html  css  js  c++  java
  • git

    git 基本操作

    一、克隆

    1、HTTP

    git clone http://github.com/username/projectname.git
    

    用于项目无写入需求

    2、HTTP Secure

    git clone https://username:password@github.com/username/projectname.git
    

    用于小项目,写入需求

    3、Secure Shell

    git clone git://github.com/username/projectname.git
    git clone git@github.com:username/projectname.git
    

    安全性最高,日常码字推荐

    二、配置

    1、个人信息

    git config --global user.name "youname"
    git config --global user.email "address@example.com"
    

    PC 建议加上 --global 参数,这样你就不用每次都需要设置个人信息了。全局配置文件位置在 ~/.gitconfig,另外该文件也可以设置快捷别名,在 [alias] 下添加快捷别名即可。

    2、克隆不全

    如果,发现自己需要克隆所有子模块。要怎么操作呢?

    $ git clone --recursive git://github.com/username/projectname.git
    

    如果已经克隆好了:

    $ git submodule update --init --recursive
    

    从远程拉取(fetch) 所有分支:

    (master)$ git fetch --all
    

    三、提交

    1、信息错误

    如果你的提交信息(commit message)写错了且这次提交(commit)还没有推(push), 你可以通过下面的方法来修改提交信息(commit message):

    $ git commit --amend
    

    这会打开你的默认编辑器, 在这里你可以编辑信息. 另一方面, 你也可以用一条命令一次完成:

    $ git commit --amend -m 'xxxxxxx'
    

    如果你已经推(push)了这次提交(commit), 你可以修改这次提交(commit)然后强推(force push), 但是不推荐这么做。

    2、作者错误

    我提交(commit)里的用户名和邮箱不对,且单个提交(commit),你可以通过下面的方法来修改它:

    
    $ git commit --amend --author "New Authorname <authoremail@mydomain.com>"
    

    如果提交的多个 commit 皆错误,你需要按照以下指令进行操作:

    $ git log
    commit a42798ac329222f5c32922c329222f554028102c6
    Author: root <root@example.me>
    Date:   Tue Oct 24 16:10:23 2017 +0000
    
        The Content In HERE.
    
    $ git rebase --interactive ${commit_info_in_the_gitlog}
    

    这将重设置你的仓库。注意需要将作者信息出现错误的头部从 pick 改为 edit

    $ git commit --amend --reset-author
    

    进行批量修改作者名称。

    $ git rebase --continue
    $ git push -f  
    

    强制覆盖推到远端。

    3、丢弃信息

    我想从一个提交(commit)里移除一个文件

    通过下面的方法,从一个提交(commit)里移除一个文件:

    $ git checkout HEAD^ myfile
    
    $ git add -A
    
    $ git commit --amend
    

    这将非常有用,当你有一个开放的补丁(open patch),你往上面提交了一个不必要的文件,你需要强推(force push)去更新这个远程补丁。

    我想删除我的的最后一次提交(commit)

    如果你需要删除推了的提交(pushed commits),你可以使用下面的方法。可是,这会不可逆的改变你的历史,也会搞乱那些已经从该仓库拉取(pulled)了的人的历史。简而言之,如果你不是很确定,千万不要这么做。

    $ git reset HEAD^ --hard
    $ git push -f [remote] [branch]
    

    我想扔掉本地的提交(commit),以便我的分支与远程的保持一致

    先确认你没有推(push)你的内容到远程。

    git status 会显示你领先(ahead)源(origin)多少个提交:

    (my-branch)$ git status
    
    # On branch my-branch
    # Your branch is ahead of 'origin/my-branch' by 2 commits.
    #   (use "git push" to publish your local commits)
    

    一种方法是:

    (master)$ git reset --hard origin/my-branch
    

    4、找回信息

    如果你意外的做了 git reset --hard, 你通常能找回你的提交(commit), 因为Git对每件事都会有日志,且都会保存几天。

    (master)$ git reflog
    

    你将会看到一个你过去提交(commit)的列表, 和一个重置的提交。 选择你想要回到的提交(commit)的SHA,再重置一次:

    (master)$ git reset --hard SHA1234
    

    这样就完成了。

    四、分支

    1、建立分支

    在master下创建一个新分支,不切换到新分支,仍在master下:

    (master)$ git branch my-branch
    

    或者创建一个新的分支并进入:

    (master)$ git checkout -b 21
    (21)$
    

    2、删除分支

    删除本地

    (master)$ git branch -D my-branch
    Deleted branch my-branch (was 4e3cd85).
    

    删除一个远程分支:

    (master)$ git push origin --delete my-branch
    

    你也可以:

    (master)$ git push origin :my-branch
    

    3、恢复分支

    在这时候你应该想起了reflog, 一个升级版的日志,它存储了仓库(repo)里面所有动作的历史。

    (master)$ git reflog
    69204cd HEAD@{0}: checkout: moving from my-branch to master
    4e3cd85 HEAD@{1}: commit: foo.txt added
    69204cd HEAD@{2}: checkout: moving from master to my-branch
    

    正如你所见,我们有一个来自删除分支的提交hash(commit hash),接下来看看是否能恢复删除了的分支。

    (master)$ git checkout -b my-branch-help
    Switched to a new branch 'my-branch-help'
    
    (my-branch-help)$ git reset --hard 4e3cd85
    HEAD is now at 4e3cd85 foo.txt added
    
    (my-branch-help)$ ls
    README.md foo.txt
    

    看! 我们把删除的文件找回来了。 Git的 reflog 在rebasing出错的时候也是同样有用的。

    备注

    Q1:为什么每个 projectname 后面都有 .git 标志,这是一种后缀名吗?

    A1:Linux 下是没有后缀名概念的。事实上通过一些设置 Web 端也可以没有后缀名概念,但对于 Github 来说该后缀名区分了是 projectissueswiki 或是其他。你也可以换成 git clone git@github.com:username/projectname.wiki 试试唷。

    Q2:第一个和第二个克隆方式似乎很相似,能再多说一点吗?

    A2:是的,本质上都是使用了 Web 端的特性和 Github 关系不大。HTTP 是万维网的数据通信的基础,HTTPS 由网景公司在 1994 年首次提出,随后扩展到互联网上。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。http://username:password@example.com/ 在标准 HTTP "Authorization" 标头中发送认证信息。

    Q3:我使用了 Secure Shell 方式并没有克隆成功为什么呢。

    A3:"日常码字" 意味着拥有项目的写入权限。所以设置上也会相对麻烦些,首先要在本机生成 SSH Key,其次复制 .pub 公钥文件至 Github。相关操作步骤网上有很多就不写出来了,你可以自己研究研究。对了,使用 ssh -T git@github.com -i ~/.ssh/id_rsa 可以知道公钥是否成功被 Github 接受使用。

  • 相关阅读:
    Web API 配置Help Page
    Web API Help Page Install WebApiTestClient 简单的测试客户端
    开始一个简单的ASP.NET Web API 2 (C#)
    一些有用的huginn Agent
    jsp填坑:找不到属性
    Oracle学习笔记
    阿里云服务器端配置TensorFlow & jupyter
    重启部署在阿里云上的huginn
    centos升级python2.7到3.6之后造成yum命令报错
    取消layUI中日期选择控件默认填充日期
  • 原文地址:https://www.cnblogs.com/itxdm/p/git.html
Copyright © 2011-2022 走看看