Git命令

放弃修改,强制覆盖本地代码

1
2
3
git fetch --all
git reset --hard origin/master
git pull

合并单个commit到指定的分支上

1
2
3
git log  //查看提交的日志,复制要合并的那个分支的commit id</span>
git checkout 要合并的分支 // 切换到要合并的分支上
git cherry-pick 上面复制的那个要合并的commit id // 提交该commit到当前分支

合并多个commit到指定的分支上

1
2
3
4
1. 基于逆向改变的分支拉出一个分支
2. rebase这个新分支的commit到master
# 代表从7dcada开始到该分支结束
git rebase --onto master 76cada^

从O开始

1
2
3
4
5
git init
git remote add origin xxx.git
git add .
git commit -m "xxx"
git push origin master

查看远程仓库地址

1
git remote -v

打标签

1
2
3
4
git tag -a '0.0.1' -m "xxx"
git tag #查看
git push --tags #提交本地所有标签
git push origin 0.0.1 #提交某个标签

删除标签

1
2
git tag -d 0.0.1
git push origin :0.0.1 #删除远程标签

git push 403 错误

原因: 本地储存了用户名和密码,重新设置就好了

1
git remote set-url origin 用户名@git.coding.xxx.git

Git常用命令

  1. git init: 初始化一个Git仓库:把某个目录变成Git可以管理的仓库
  2. git add test.h: 把文件test.h添加到仓库
  3. git commit -m "添加了test.h文件": 把文件提交到仓库。(git commit命令,-m后面输入的是本次提交的说明)
  4. git push (origin master(分支名称)): 推送到远程仓库,其中()里面是可选的
  5. git pull (origin master(分支名称)): 拉取远程仓库最新,其中()里面是可选的
  6. git status: 查看工作区的状态
  7. git diff test.h: 查看test.h文件修改了什么(diff—>difference)
  8. git log: 显示从最近到最远的提交日志。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数
  9. git remote add origin git@...: 关联一个远程库
  10. git push -u origin master: 当远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
  11. git clone git@...: 克隆
  12. git remote: 要查看远程库的名称
  13. git remote -v: 显示更详细的远程库信息。显示可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址
  14. git fetch: 个人粗浅的理解为将远程所有的分支信息拉取到本地
    1

回退与撤销

  1. git reset --hard HEAD^: 回到上一个版本
  2. git reset --hard HEAD^^: 回到上上个版本
  3. git reset --hard HEAD~100: 回到上100个版本
  4. git reset --hard 791c95aa44cc5540d93a146d6d341e5d38936762: 根据提交的版本号进行版本的回退
  5. git reflog: 查看命令历史,以便确定要回到未来的哪个版本。
  6. git checkout -- readme.txt: 让这个文件回到最近一次git commit或git add时的状态。这里是把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
    a. 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    b. 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
  7. git reset HEAD 文件(readme.txt):
    a. 可以把暂存区的修改撤销掉(unstage),重新放回工作区。若要丢弃工作区的修改,还需要git checkout – readme.txt
    b. git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

分支与合并

  1. git branch dev: 创建一个名称叫dev的分支
  2. git checkout dev: 当前的分支切换为dev分支
  3. git checkout -b dev: 创建一个dev分支,并且切换到dev分支(相当于是是前面两句命令的合并)
  4. git branch: 列出所有分支,当前分支前面会标一个*
  5. git merge dev: 把dev分支的工作成果合并到当前分支上, git merge命令用于合并指定分支到当前分支
  6. git branch -d dev: 删除dev分支
  7. git branch -D dev: 若dev分支还没合并到所切出来的分支,则git branch -d dev将不能删除dev分支,可以通过git branch -D dev强行删除dev分支
  8. git log --graph: 查看分支合并图 git log --graph --pretty=oneline --abbrev-commit
  9. git merge --no-ff -m "备注的信息" dev: 将dev分支合并到当前分支的时候强制禁用Fast forward模式
    a. 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
    b. 合并分支时,加上–no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward 合并就看不出来曾经做过合并。
  10. git branch -r: 查看远程分支
  11. git branch -a: 查看所有分支(会显示本地分支和远程分支)

标签 tag

  1. git tag: 列出所有 tag
  2. git add tag xxxx: 新建一个tag
  3. git push --tags: 推送tag到远程

git多账号的使用/体验

  1. 生成 ssh key

    1
    2
    ssh-keygen -t rsa -C "your-email-address1"
    ssh-keygen -t rsa -C "your-email-address2"
  2. 将key添加到ssh agent上

    1
    ssh-add ~/.ssh/id_rsa ssh-add ~/.ssh/id_rsa_2
  1. 配置.ssh/config

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    vi .ssh/config
    # 加上以下内容
    # github
    # first.github (first@gmail.com)
    Host github.com
    HostName github.com
    IdentityFile ~/.ssh/id_rsa

    # second (second@gmail.com)
    Host second
    HostName github.com
    IdentityFile ~/.ssh/id_rsa_second

    # gitOSc
    # default git@osc
    Host git.oschina.net
    HostName git.oschina.net
    IdentityFile ~/.ssh/id_rsa
    Host second
    HostName git.oschina.net
    IdentityFile ~/.ssh/id_rsa_work
  2. 将 id_rsa.pub id_rsa_2.pub添加到对应账号上

  3. 验证是否成功

    1
    2
    3
    4
    5
    6
    //1. Github验证
    ssh -T git@github.com
    ssh -T git@second
    //2. Git Osc验证
    ssh -T git@git.oschina.net
    ssh -T git@git.second.net(貌似是这个吧,有点忘了)
  4. 使用账号2clone push

    1
    2
    3
    4
    5
    6
    git clone... 下来后 修改
    // 方法1
    git remote rm origin
    git remote add origin git@onemaybe:OneMaybe/OneMaybe.github.io.git
    // 方法2
    vi .git/config


-------------The End-------------

本文标题:Git命令

文章作者:kysonyangs

发布时间:2016年11月05日 - 15:11

最后更新:2020年08月11日 - 10:08

原始链接:https://kysonyangs.github.io/default/Git命令/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。