git命令

查看状态

用户签名:
git config --global user.name MLuYao

git config --global user.email 1363557207@qq.com

这里设置用户签名和将来登陆的GitHub账号或其他平台的帐号没有任何关系,只代表Windows本地客户端

初始化本地库
git init

查看状态

git status

添加到暂存区

git add <filename/path>

从暂存区中删除

git rm --cached hello.txt

将暂存区文件提交到本地库

git commit m "版本信息" [filename]
加了filename只提交指定文件

查看版本信息

git reflog
查看引用日志信息
git log
查看详细的日志
版本穿梭:
git reset --hard 版本号

HEAD指向的就是当前分支

版本穿梭改变的是HEAD指针

分支操作
命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git switch 分支名切换分支,和上面的一样效果
git merge 分支名把指定的分支合并到当前分支上
git branch -m [前分支] 分支名给当前分支改名为指定
git branch -D 分支名删除分支

团队内协作

push-推送到代码托管中心

clone-完整克隆复制下来

pull-更新本地库代码

跨团队协作

fork-叉子,复制到自己的远程库

clone-克隆到自己的本地库

push-推送到自己的代码托管中心

Pull request-拉取请求,推送到别人的远程库

GitHub 操作

https://github.com/

远程仓库操作
命令名称作用
git remote -v查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名 分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库克隆到本地
git pull 远程地址别名 远程分支名将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并
git remote rm 库名删除远程库

推送的最小单位是分支

报错信息:
fatal: unable to access 'https://github.com/xxx/autowrite.git/'
OpenSSL SSL_read: Connection was reset, errno 10054
又或者
fatal: unable to access 'https://github.com/xxx/autowrite.git/'
Failed to connect to github.com port 443: Timed out
因为git在拉取或者提交项目时,中间会有git的http和https代理,但是我们本地环境本身就有SSL协议了,所以取消git的https代理即可,不行再取消http的代理。

! [rejected] main -> main (non-fast-forward)
这个问题解释起来很简单,还记得我们创建仓库时添加到README和license吗?在github仓库的main分支中有这两个文件,而在我们本地的仓库并没有这两个文件,如果我们执行这次commit,那么可能导致这两个文件丢失。

接下来你有以下几个解决方案:下列代码中的example为远程仓库名称

1.无视警告,README和license我不要了。

git push --force

执行以上指令强行提交。

2.试着获取远程仓库的初始提交( initial commit),就是README和license这两个文件的commit,在此基础上 覆盖 commit。但是这种方法可能有点棘手,不如暴力提交简单。

git fetch example //获取初始提交
git rebase example/mian 

3.试着合并初始提交与你的提交,这也是我最推荐的方法:

git fetch example
git merge --allow-unrelated-histories example/main
--allow-unrelated-histories:允许不相关的历史记录
可以没有
首先执行git fetch example 获取初始提交



然后执行git merge --allow-unrelated-histories example/main合并,之后会进入这样一个文件,提示我们为本次提交加一些信息备注,我们很清楚我们在做什么,所以按两下ESC键,输入**:wq**(注意有冒号,这是UNIX保存的命令),回车

可以看到本地的git仓库已经与远程仓库合并了,README和license也可以在本地仓库找到了。

最后我们git push example main

ssh-keygen –t rsa –C “git仓库邮箱”

git config --global --unset http.proxy
//取消http代理
git config --global --unset http.proxy
//取消https代理 
git config --global --unset https.proxy

git push <远程主机名> <本地分支名>:<远程分支名>

git push origin master:main 这样也行

克隆

git clone 地址

clone会做三件事:

  • 拉取代码
  • 初始化本地库
  • 创建别名

测试登录

ssh -T git@github.com

团队内协作需要项目主人将其他人拉入团队,这样才能修改团队代码

跨团队协作

fork,修改,再pull request,接下来对方merge就行了

生成SSH

ssh-keygen -t rsa
ssh-keygen:生成SSH私钥和公钥
-t:指定生成的加密算法
-C:描述

创建新仓库方法

git init
git add ...
git commit -m "first"
git branch -M main
git remote add origin https://github.com/MLuYao/Test.git
//把这个地址当作远端的仓库
git push -u origin main

把已有仓库提交的方法

git remote add origin https://github.com/MLuYao/Test.git
//把这个地址当作远端的仓库
git branch -M main
//把master改名为main
git push -u origin main

从工作区打回去

git checkout <filename>

提交后撤回

git reset HEAD^
撤回一条commit

撤销合并分支

git merge --absort

合并更改错误

git remote -v 
git remote rm origin
git remote add origin git@github.com:xxse/xx.git

git pull --rebase origin main

添加文件到缓存

git add -A
git add <filename>

分支

以当前分支为基础新建分支
git checkout -b <branchname>

列举所有分支
git branch

单纯切换到某个分支
git checkout <branchname>

删除特定的分支
git branch -D <branchname>

合并<branchname>到当前分支分支
git merge <branchname>

Git与 GitHub 远程仓库

推送当前分支到最新的提交
git push
拉取远程分支最新的提交打到本地
git pull

git status:查看当前分支状态

git add [file/dir/.]:提交文件,文件夹或提交全部修改过的文件。

最新

仓库克隆

git clone

克隆所有分支

当你执行 git clone 命令时,Git 会自动克隆远程仓库的默认分支(通常是 mastermain),但也会下载所有其他分支的信息。你可以通过以下命令查看所有分支:

git branch -a

切换到不同的分支

在克隆仓库后,如果你想切换到不同的分支,可以使用以下命令:

bash

复制

git checkout <branch-name>

如果你想要切换到一个远程分支,并且本地还没有创建对应的分支,可以使用:

bash

复制

git checkout -b <local-branch-name> <remote>/<remote-branch-name>

例如,如果你想切换到远程的 feature-branch 分支,并且在本地区创建一个同名的分支,可以执行:

bash

复制

git checkout -b feature-branch origin/feature-branch

克隆特定的分支

如果你想只克隆特定的分支,而不是所有分支,可以使用 --single-branch 选项,并结合 -b 选项指定分支名:

bash

复制

git clone -b <branch-name> --single-branch <repository> <directory>

例如,只克隆 feature-branch 分支:

bash

复制

git clone -b feature-branch --single-branch https://github.com/user/repo.git

更新分支列表

如果你想更新本地分支列表以获取远程仓库的最新分支信息,可以使用:

bash

复制

git fetch --all

这个命令会下载所有远程分支的最新信息,但不会自动合并或切换分支。

创建新的本地分支

如果你想基于远程分支创建一个新的本地分支,可以使用:

bash

复制

git checkout -b <new-local-branch> <remote>/<remote-branch>

这将创建一个新的本地分支,并将其跟踪到指定的远程分支。

本地仓库连接远程仓库

git remote add 仓库名 远程分支:本地分支

添加上游服务器,这样直接使用git push就自动推送了

git push --set-upstream origin main

综述

$ git --help
usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [--config-env=<name>=<envvar>] <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone     Clone a repository into a new directory
   init      Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add       Add file contents to the index
   mv        Move or rename a file, a directory, or a symlink
   restore   Restore working tree files
   rm        Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect    Use binary search to find the commit that introduced a bug
   diff      Show changes between commits, commit and working tree, etc
   grep      Print lines matching a pattern
   log       Show commit logs
   show      Show various types of objects
   status    Show the working tree status

grow, mark and tweak your common history
   branch    List, create, or delete branches
   commit    Record changes to the repository
   merge     Join two or more development histories together
   rebase    Reapply commits on top of another base tip
   reset     Reset current HEAD to the specified state
   switch    Switch branches
   tag       Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch     Download objects and refs from another repository
   pull      Fetch from and integrate with another repository or a local branch
   push      Update remote refs along with associated objects

初始化仓库手段

clone

克隆一个仓库

选项

  • -q

  • --quiet

    安静地运行。进度不会报告到标准错误流。

  • -v

  • --verbose

    详细运行。不会影响向标准错误流报告进度状态。

  • --mirror

    设置源存储库的镜像。这意味着--bare。与相比--bare,它不仅将源的本地分支映射到目标的本地分支,还映射所有引用(包括远程跟踪分支、注释等)并设置 refspec 配置,以便所有这些引用都被目标存储库中的--mirror覆盖。git remote update

  • -o <名称>

  • --origin <名称>

    不要使用远程名称origin来跟踪上游存储库,而是使用**clone.defaultRemoteName 。从配置中覆盖。

  • -b <名称>

  • --branch <名称>

    不要将新创建的 HEAD 指向克隆存储库的 HEAD 指向的分支,而是指向**分支。在非裸存储库中,这是将要签出的分支。 --branch还可以在生成的存储库中获取标签并分离该提交处的 HEAD。

  • --no-tags

    不要克隆任何标签,并 remote.<remote>.tagOpt=--no-tags在配置中设置,确保将来的git pull操作git fetch不会遵循任何标签。后续显式标签提取仍将有效(参见git-fetch(1))。可以与 一起使用--single-branch来克隆和维护一个分支,除了单个克隆分支外没有其他引用。这很有用,例如,可以维护某些存储库默认分支的最小克隆,以进行搜索索引。

    要克隆到的新目录的名称。如果没有明确指定**repo ( for/path/to/repo.gitfoo for host.xz:foo/.git),则使用源存储库的“humanish”部分。仅当目录为空时才允许克隆到现有目录。

init

创建一个空的 Git 存储库或重新初始化现有的存储库

选项

-b <分支名称>

--initial-branch=<分支名称>

工作区域改变

add

将文件内容添加到索引

默认情况下,该git add命令不会添加忽略的文件。如果在命令行上明确指定了任何忽略的文件,git add 则将失败并显示忽略文件的列表。通过目录递归或 Git 执行的文件名通配符(在 shell 前引用您的通配符)到达的忽略文件将被默默忽略。可以使用git add-f命令通过(force) 选项添加忽略的文件

选项

<路径规范>…

要从中添加内容的文件。*.c可以给出文件通配符(例如 )来添加所有匹配的文件。还可以给出前导目录名(例如dir添加dir/file1dir/file2)来更新索引以匹配整个目录的当前状态(例如指定dir不仅会记录工作树中修改的文件、添加到工作树的dir/file1 文件,还会记录从工作树中删除的文件)。请注意,旧版本的 Git 过去会忽略已删除的文件;如果您想添加已修改或新的文件但忽略已删除的文件,请使用选项。dir/file2``dir/file3``--no-all

mv

移动或重命名文件、目录或符号链接

git mv [<选项>] <源>… <目标>

移动或重命名文件、目录或符号链接。

git mv [-v] [-f] [-n] [-k] <源> <目标>
git mv [-v] [-f] [-n] [-k] <源>... <目标目录>

在第一种形式中,它将 (必须存在,并且是文件、符号链接或目录)重命名为 。在第二种形式中,最后一个参数必须是一个现有目录;给定的源将被移动到此目录中。

成功完成后索引会更新,但仍必须提交更改。

选项

  • -f

    • 力量

    即使 <目标> 存在,也强制重命名或移动文件。

restore

恢复工作树文件

以下序列切换到master分支,恢复到 Makefile两个修订版本,错误地删除 hello.c,并从索引中恢复它。

$ git switch master
$ git restore --source master~2 Makefile   (1)
$ rm -f hello.c
$ git 恢复 hello.c                      (2)
  1. 从另一个提交中取出文件
  2. 从索引恢复 hello.c

如果你想恢复所有C 源文件以匹配索引中的版本,你可以说

$ git restore '*.c'
To restore all files in the current directory

$ git restore .

rm

从工作树和索引中删除文件

检查历史和状态

bisect

使用二分查找来找到引入错误的提交

diff

显示提交之间的更改,提交和工作树之间的更改等

显示提交、提交和工作树等之间的变化

git diff [<选项>] [<提交>] [--] [<路径>…]
 git diff [<选项>] --cached [--merge-base] [<提交>] [--] [<路径>…]
 git diff [<选项>] [--merge-base] <提交> [<提交>…] <提交> [--] [<路径>…]
 git diff [<选项>] <提交>…<提交> [--] [<路径>…]
 git diff [<选项>] <blob> <blob>
 git diff [<选项>] --no-index [--] <路径> <路径>

grep

打印匹配模式的行

log

显示提交日志

建议使用

git log --oneline --all --graph

show

显示各种类型的对象

status

显示工作树状态

扩展、标记和调整你的共同历史

branch

列出、创建或删除分支

-d

—delete

删除分支。该分支必须完全合并到其上游分支中,或者如果没有使用或HEAD设置上游 ,则合并到 中。--track``--set-upstream-to

-D

的快捷方式--delete --force

-f

—force

commit

记录对仓库的更改

git commit -m "描述"

merge

将两个或更多开发历史合并在一起

git merge <branch>

rebase

git rebase 命令用于将一个分支的更改重新应用到另一个分支上,同时保持提交历史的整洁。以下是 git rebase 命令的一些常见格式及其用途:

在另一个基础提示上重新应用提交

git rebase <base-branch>

交互式重定基础

在重定基础过程中,你可以编辑、删除或重新排序提交:

git rebase -i <base-branch>

这将打开一个文本编辑器,允许你指定如何处理每个提交。

reset

将当前 HEAD 重置到指定状态

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

git reset [] []

此形式将当前分支头重置为<commit>并可能根据 更新索引(将其重置为 的树<commit>)和工作树<mode>。在操作之前,ORIG_HEAD 设置为当前分支的尖端。如果<mode>省略 ,则默认为--mixed<mode>必须是以下之一:

  • —soft

    完全不触及索引文件或工作树(但会将头部重置为<commit>,就像所有模式一样)。这样,所有更改的文件都处于“要提交的更改”状态,就像git status 这样。

  • —mixed

    重置索引但不重置工作树(即,保留更改的文件但不将其标记为提交)并报告未更新的内容。这是默认操作。

    如果-N指定了,删除的路径将被标记为意向添加(参见 [git-add 1])。

  • —hard

    重置索引和工作树。此后对工作树中跟踪文件的任何更改都<commit>将被丢弃。任何未跟踪的文件或正在写入任何跟踪文件的目录都将被删除。

  • —merge

    重置索引并更新工作树中与 之间不同的文件<commit>HEAD但保留索引和工作树之间不同的文件(即未添加更改的文件)。如果与<commit>索引之间不同的文件有未暂存的更改,则重置将中止。

    换句话说,--merge执行类似于的操作git read-tree -u -m <commit>,但会延续未合并的索引条目。

  • —keep

    重置索引条目并更新工作树中与 之间不同的文件<commit>。如果与HEAD之间不同的文件有本地更改,则重置将被中止。<commit> HEAD

switch

切换分支

tag

创建、列出、删除或验证用 GPG 签名的标签对象

协作

fetch

从另一个仓库下载对象和引用

pull

从另一个仓库或本地分支获取并整合

push

更新远程引用及其相关的对象

Git全局设置、查看、取消代理

下面配置根据需要二选一

  • 设置socks5代理
git config --global http.proxy 'socks5://127.0.0.1:10808' 
git config --global https.proxy 'socks5://127.0.0.1:10808'
  • 设置http代理
git config --global http.proxy 'http://127.0.0.1:7890' 
git config --global https.proxy 'https://127.0.0.1:7890'

查看代理

git config --global --get http.proxy
git config --global --get https.proxy

取消代理

git config --global --unset http.proxy
git config --global --unset https.proxy

Q.E.D.

评论

评论加载中……