avatar

Catalog
Git Commen Instructions

最近在某推文(Git/SQL/正则表达式在线刷题学习网站)上发现一款可以用来学习 git 的游戏:Learn git

闯关过程中记录一些常用 git 命令:

本地操作

  • 文件提交

    bash
    1
    2
    3
    $git commit #提交暂存区文件到本地仓库
    $git commit –m [提交描述]/[文件名] #提交暂存区文件到本地仓库
    $gut commit -a -m [提交描述] #加的-a参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区

    具体可参见 https://www.cnblogs.com/qianqiannian/p/6005628.html

  • 分支的合并以及 rebase 操作

    bash
    1
    2
    3
    4
    $git merge [branch xxx] #将xxx分支合并到当前分支,xxx分支停留在合并前的版本,当前分支不变
    $git rebase [branch xxx] #以xxx为基础,将当前分支上的修改增加到xxx分支上,并生成新的版本
    $git status #查看冲突文件
    $git rebase --continue #解决冲突之后继续之前的rebase操作
  • 分支的新建,切换,删除

    bash
    1
    2
    3
    4
    $git branch [new branch xxx] #创建新分支xxx
    $git checkout [branch xxx] #切换到xxx分支
    $git checkout -b [branch xxx] #创建并切换到新分支xxx
    $git branch -d [branch xxx] #删除xxx分支
  • 查看日志

    bash
    1
    2
    $git log --oneline -[number] #查看最近n次日志
    $git log --oneline --graph #(图标形式)查看日志
  • 退回上一版本

    bash
    1
    2
    $git reset #将当前分支退回上一版本
    $git revert #将当前分支退回上一版本并产生新commit
  • 版本操作
    bash
    1
    2
    3
    4
    $git cherry-pick[version] #可以理解为”挑拣”提交,获取某一个分支的单笔提交,并作为一个新的提交引入到当前分支上
    $git checkout [version/branch] #使HEAD指向某一次commit或者某一分支(^表示前一版本,~n表示前n版本)
    $git rebase -i [version] #合并提交(有交互界面)
    $git branch -f [branch xxx] [version] #直接将xxx分支重新分配到特定版本

远程操作

  • git clone
    将远程库克隆到本地,同时产生 origin/master 分支(远程分支,名字形如 [remote name/branch name]

  • git fetch [remote] [place]
    远程抓取到本地,走两步:将远程的新 commit 同步到本地,并将origin/master 分支的位置更新(指向远程库的最新 commit)

    • [remote] [place] 与 push 使用方法类似
    • 若本地分支名称与远程分支名称不对应,可将 [place] 位置的参数改为 [source] [destination] ,source 为远程位置,destination 为本地位置
      • source 位置名称未声明过时会在本地创建新分支
      • source 位置为空, destination 位置名称未声明过时会在本地创建 destination 新分支
  • git pull [remote][place] = git fetch + git merge
    抓取合并(远程分支与本地分支)

  • git pull --rebase [remote] [place] = git fetch + git rebase
    抓取合并

  • git push [remote] [place]
    当且仅当本地的远程分支更新至最新版本时,将本地内容推至远程库。

    • 若本地远程分支非最新版本会报错,这时需要先执行 pull 再继续 push
    • 若本地分支名称与远程分支名称不对应,可将 [place] 位置的参数改为 [source] [destination] ,source 为本地位置,destination 为远程位置
      • destination 位置名称未声明过时会在本地和远程创建新分支
      • source 位置为空时会讲本地和远程的destination库删除
  • 将本地 foo 分支设置为跟踪 origin/master 分支的两种办法:

    • 执行 git checkout -b foo o/master
    • 执行 git branch -u o/master foo

.gitignore

附一个网址:https://www.jianshu.com/p/699ed86028c2

版本切换

  • 回退单个文件到某次commit
    bash
    1
    2
    $git log "filename" #找到对应commit短哈希
    git reset "commit-id" "filename"

常见问题

  • 出现报错:fatal: refusing to merge unrelated histories
    原因:远程仓库和本地仓库完全不相干,如果需要将两者合并可以使用命令如下

    bash
    1
    $git pull origin master --allow-unrelated-histories
  • 出现报错:fatal: The current branch master has no upstream branch.
    原因:没有将本地的分支与远程仓库的分支进行关联。出现这种情况主要是由于远程仓库太多,且分支较多。在默认情况下,git push 时一般会上传到 origin 下的 master 分支上,然而当 repository 和 branch 过多,而又没有设置关联时,git 就会产生疑问,因为它无法判断你的 push 目标。

  • 有关 git remote prune origin
    https://blog.csdn.net/BryantLmm/article/details/85130091

  • 有关解决冲突

    • git status 可以告诉我们冲突的文件
    • git merge --abort 命令仅仅在合并后导致冲突时才使用。``将会抛弃合并过程并且尝试重建合并前的状态。但是,当合并开始时如果存在未 commit 的文件,git merge --abort 在某些情况下将无法重现合并前的状态。(特别是这些未 commit 的文件在合并的过程中将会被修改时)
    • 运行 git-merge 时含有大量的未 commit 文件很容易让你陷入困境,这将使你在冲突中难以回退。因此非常不鼓励在使用 git-merge 时存在未 commit 的文件,建议使用 git-stash命令将这些未 commit 文件暂存起来,并在解决冲突以后使用 git stash pop 把这些未 commit 文件还原出来。
  • 清理远程仓库
    附一个网址: https://www.cnblogs.com/kaerxifa/p/11211956.html

  • git stash
    先附一个网址,之后再详细写。

Author: Yiwen Zhang
Link: http://bessss-zyw.github.io/2020/02/14/git/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶