git相关总结

git基础

  • 创建新仓库
    创建新文件夹,打开,执行git init以创建新的git仓库。

  • 检出仓库
    执行如下命令以创建一个本地仓库的克隆版本:
    git clone /path/to/repository
    如果是远端服务器上的仓库,命令是这个样子:
    git clone username@host:/path/to/repository

  • 工作流
    本地仓库由 git 维护的三棵“树”组成。第一个是 【工作目录】,它持有实际文件;第二个是 【暂存区(Index)】,它像个缓存区域,临时保存改动;最后是【HEAD】,它指向最后一次提交的结果。

  • 添加和提交
    可以提出更改(把它们添加到暂存区),使用如下命令:

    1
    2
    git add <filename>
    git add . #添加文件到暂存区

    这是 git 基本工作流程的第一步;使用如下命令以实际提交改动,暂存区内容添加到仓库:
    git commit -m "代码提交信息"
    现在,所作改动已经提交到了 HEAD,但是还没到远端仓库。

  • 推送改动
    改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库:
    git push origin master
    可以把 master 换成想要推送的任何分支。
    如果还没有克隆现有仓库,并欲将仓库连接到某个远程服务器,可以使用如下命令添加:
    git remote add origin <server>
    如此就能够将改动推送到所添加的服务器上去了。
    【分支】 分支是用来将特性开发绝缘开来的。在创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
    创建一个叫做“feature_x”的分支,并切换过去:
    git checkout -b feature_x
    切换回主分支:
    git checkout master
    再把新建的分支删掉:
    git branch -d feature_x
    除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的:
    git push origin <branch>

  • 更新与合并
    要更新你的本地仓库至最新改动,执行:
    git pull
    以在工作目录中 获取(fetch) 并 合并(merge) 远端的改动。 要合并其他分支到你的当前分支(例如 master),执行: git merge <branch> 在这两种情况下,git 都会尝试去自动合并改动。但可能并非每次都成功,并可能出现冲突(conflicts)。 这时候就需要修改这些文件来手动合并这些冲突(conflicts)。改完之后,需要执行如下命令以将它们标记为合并成功: git add <filename> 在合并改动之前,可以使用如下命令预览差异:git diff <source_branch> <target_branch>

  • 标签
    为软件发布创建标签是推荐的。这个概念早已存在,在 SVN 中也有。你可以执行如下命令创建一个叫做 1.0.0 的标签:
    git tag 1.0.0 1b2e1d63ff
    1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID:
    git log 也可以使用少一点的提交 ID 前几位,只要它的指向具有唯一性。

  • log
    如果想了解本地仓库的历史记录,最简单的命令就是使用:
    git log
    可以添加一些参数来修改他的输出,从而得到想要的结果。 只看某一个人的提交记录:
    git log --author=bob
    一个压缩后的每一条提交记录只占一行的输出:
    git log --pretty=oneline
    或者想通过 ASCII 艺术的树形结构来展示所有的分支, 每个分支都标示了他的名字和标签:
    git log --graph --oneline --decorate --all
    看看哪些文件改变了:
    git log --name-status
    这些只是可以使用的参数中很小的一部分。更多的信息,参考:
    git log --help
    替换本地改动 假如你操作失误(当然,这最好永远不要发生),你可以使用如下命令替换掉本地改动:
    git checkout -- <filename>
    此命令会使用 HEAD 中的最新内容替换掉工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。
    假如想丢弃在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将本地主分支指向它:

    1
    2
    git fetch origin
    git reset --hard origin/master

    实用小贴士 内建的图形化 git:gitk
    彩色的 git 输出:
    git config color.ui true
    显示历史记录时,每个提交的信息只显示一行:
    git config format.pretty oneline
    交互式添加文件到暂存区:
    git add -i

  • 展示暂存区和最近版本的不同
    输出工作区和暂存区的 different (不同)。
    git diff

  • git保存当前状态
    untracked文件:新建的文件
    git stash -u

  • git展示所有stashes
    git stash list

  • 回到某个stash的状态
    git stash apply <stash@{n}>

  • 回到最后一个stash的状态,并删除这个stash
    git stash pop

  • 同步远程仓库的代码,并且覆盖本地的改变
    慎用,会把本地commit提交的没有推送到远程的代码会覆盖掉

    1
    git fetch origin && git reset --hard origin/master && git clean -f -d
  • 删除已经合并到 master 的分支
    删除已经合并到 master 的分支

    1
    git branch --merged master | grep -v '^\*\|  master' | xargs -n 1 git branch -d
  • 查看标签
    git tag

  • 展示当前分支的最近的 tag
    git describe --tags --abbrev=0

  • 丢弃本地所有的修改,回到远程仓库的状态

    1
    git fetch origin && git reset --hard origin/master && git clean -f -d
  • 展示本地分支关联远程仓库的情况 && 关联远程分支
    展示本地分支关联远程仓库的情况
    git branch -vv
    关联远程分支
    关联之后,git branch -vv 就可以展示关联的远程分支名了,同时推送到远程仓库直接:git push,不需要指定远程仓库了。
    git branch -u origin/mybranch
    或者在 push 时加上 -u 参数
    git push origin/mybranch -u

  • Git Checkout 远程分支
    当你在本地创建一个分支时,它只存在于本地,直到它被推送到 GitHub 并成为远程分支,如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 创建一个新的分支
    git branch new-branch
    # 切换到新的分支
    git checkout new-branch
    # 创建一个更新
    touch new-file.js
    # 提交更新
    git add .
    git commit -m "add new file"
    # 推送到新的分支
    git push --set-upstream origin new-branch

    如何 Git Checkout 远程分支
    假设另一个开发人员创建了一个远程分支,而你想要拉取该分支,可按照以下步骤:

    1. 获取所有远程分支
      git fetch origin
      这将从仓库中获取所有远程分支。origin 是要定位的远程名称。所以如果你有一个上游远程名称 upstream,可以调用 git fetch upstream。
    2. 列出所有可以 checkout 的分支
      运行以下命令列出所有可以 checkout 的分支:
      git branch -a
      这条命令的输出是所有可以 checkout 的分支。远程分支的前缀是 remotes/origin。
    3. 从远程分支拉取更改
      请注意,你不能直接在远程分支上进行更改。因此,你需要该分支的副本。假设你想复制远程分支 fix-failing-tests,运行以下命令:
      git checkout -b fix-failing-tests origin/fix-failing-tests
      将执行:
      创建了一个名为 fix-failing-tests 的新分支
      checkout 那个分支
      将更改从 origin/fix-failing-tests 拉到该分支
      现在你有了那个远程分支的副本。此外,可以将提交推送到该远程分支。
      例如,像这样推送一个新的提交:
      1
      2
      3
      4
      touch new-file.js
      git add .
      git commit -m "add new file"
      git push
      这会将已提交的更改推送到 origin/fix-failing-tests。
      例如 git push origin fix-failing-tests不必指定我们将更改推送到何处),那是因为 git 会自动设置本地分支来跟踪远程分支。
      删除分支git branch -d (branchname)
      合并分支git merge branchname
  • pycharm Git版本回退 自由切换
    一定需要注意的是,在切换代码版本前,一定要将当前的状态commit下来,然后再进行下面的切换操作。否则,当前修改的代码就有可能丢失了。
    show git log 查看commit版本 版本11:40->版本10:33
    选中版本10:33 Reset Cuurent Branch to Here 选择Hard模式即可回退 若又想回退版本11:40 要先从log记录找到版本对应commit ID,选择Reset Head 任选Hard模式就又回到代码版本了。


git相关总结
https://www.prime.org.cn/2023/01/30/git总结-技巧/
Author
emroy
Posted on
January 30, 2023
Licensed under