Git使用指南

目录

git 基础

git 版本查询

git的配置

获取git仓库

查看文件状态

跟踪新文件

忽略文件

查看已暂存和未暂存的修改

提交更新

移除文件

查看提交历史

撤销操作

重新提交

取消暂存文件

本地提交回退

远程仓库

查看远程仓库

添加远程仓库

从远程仓库中抓取与拉取

推送到远程仓库

查看某个远程仓库

远程仓库的重命名与

打标签

查看标签

创建标签

后期打标签

推送标签到共享服务器上

删除标签

检出标签

git 别名

git 分支

创建分支

切换分支

合并分支

删除分支

分支管理

远程分支

推送

切换

查看远程分支

拉取远程分支

删除远程分支

补丁

生成补丁

应用补丁

1.git apply

2.git am

SSH公钥生成


git 基础

git 版本查询

git --version

git的配置

--global :让所有仓库都生效

git config --global user.name "Finn Ma"  #设置用户名,初次使用必须首先设置git config --global user.email [email protected]  #设置用户邮箱,初次使用必须首先设置git config --global core.autocrlf false #关闭换行符类型转换git config --global credential.helper store #保存凭证git config --list #查看git配置git config --show-origin #查看所有的配置以及它们所在的文件git config --unset user.name #删除用户名配置

获取git仓库

通常有两种获取 Git 项目仓库的方式:

  1. 将尚未进行版本控制的本地目录转换为 Git 仓库

git init  
  1. 克隆现有仓库

git clone  
git clone   #指定新的目录名#Example
git clone https://github.com/FinnMa1/test.git
git clone https://github.com/FinnMa1/test.git my_test

查看文件状态

git status

git status 命令的输出十分详细,但其用语有些繁琐。git status -s你将得到一种 格式更为紧凑的输出。

git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt

??:未跟踪文件,A:新添加到暂存区中的文件,M:修改过的文件. 输出中有两栏,左栏指明了暂存区的状态,右栏指明了工作区的状态。例如,上面的状态报告显示: README文件在工作区已修改但尚未暂存,而 lib/simplegit.rb 文件已修改且已暂存。 Rakefile文件已修,暂存后又作了修改,因此该文件的修改中既有已暂存的部分,又有未暂存的部分。

跟踪新文件

git add 命令使用文件或目录的路径作为参数;如果参 数是目录的路径,该命令将递归地跟踪该目录下的所有文件.

这是个多功能命令:可以用它开 始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这 个命令理解为“精确地将内容添加到下一次提交中”而不是“将一个文件添加到项目中”要更加合适

git add #Example
git add README.txt

忽略文件

创建一个名为 .gitignore的文件,列出要忽略的文件的模式。 文件 .gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略

  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中

  • 匹配模式可以以(/)开头防止递归

  • 匹配模式可以以(/)结尾指定目录

  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反

cat .gitignore
*.[oa]      # 忽略所有以 .o 或 .a 结尾的文件
*~          # 忽略所有名字以波浪符(~)结尾的文件
*.a # 忽略所有的 .a 文件
!lib.a # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
/TODO # 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
build/ # 忽略任何目录下名为 build 的文件夹
doc/*.txt # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/**/*.pdf # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件

github上数十种语言的.ignore详细示例: https://github.com/github/gitignore

查看已暂存和未暂存的修改

git diff    # 查看已经追踪但是尚未暂存的文件更新了哪些部分,即是没有git add
git diff --staged #对已暂存文件与最后一次提交(commit)的文件差异

提交更新

git commit -m "some commit information" #将暂存区域文件提交

git commit -a -m "some commit information" #把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add,建议不要使用

移除文件

git rm   # 从暂存区域移除
git commit -m "remove the file under the git control."

 git rm log/ # 删除log文件夹下的所有文件

查看提交历史

git log                     # 查看所有历史
git log -1                  # 最近一次的提交记录
git log -p                  # 每次提交所引入的差异
git log -p -1
git log --stat              # 每次提交的最后列出文件增删修改等变化
git log --pretty=oneline    # 每一次的提交在一行显示
git log --oneline           # 每一次的提交在一行显示,sha值只保留部分
git reflog                  # 查看所有log
git log --oneline --decorate --graph --all #查看分叉历史

撤销操作

重新提交

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有 --amend 选项的提交命令来重新提交:

git commit --amend

例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:

git commit -m 'initial commit'
git add forgotten_file      # 再次add忘记的文件
git commit --amend          # 重新提交

最终你只会有一个提交——第二次提交将代替第一次提交的结果。

取消暂存文件

git restore           #没add与commit时
git restore --staged  #只add没有commit

本地提交回退

git reset --hard  退到/进到指定commit的sha码  

回退到以前的提交后,之前的commit log都会丢失,使用git reflog可以看到

远程仓库

查看远程仓库

如果你已经克隆了自己的仓库,那么至少应该能看到origin——这是Git给你克隆的仓库服务器的默认名字

git remote
git remote -v # 查看远程仓库地址

添加远程仓库

git remote add   

#Example
git remote add test https://github.com/FinnMa1/test.git

以后可以在命令行中使用来代替整个 URL, 如上述示例中的test

从远程仓库中抓取与拉取

如果使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以“origin”为简写

git fetch
git fetch 

git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。

推送到远程仓库

git push  

当你想要将 master 分支推送到origin服务器时(克隆时通常会自动帮你设置好两个名字),那么运行这个命令就可以将你所做的备份到服务器:

git push origin master # master为本地分支名, origin为远程服务器名

查看某个远程仓库

git remote show 

#Example
git remote show origin

远程仓库的重命名与

重命名

git remote rename  

移除

git remote rm
git remote rm 

一旦使用这种方式删除了一个远程仓库,那么所有和这个远程仓库相关的远程跟踪分支以配置信息也会一起被删除。

打标签

查看标签

git tag

git tag -l "v1.8.5*" #查看v1.8.5开头的tag

创建标签

轻量标签(lightweight)

本质上是将提交校验和存储到一个文件中——没有保存 任何其他信息。 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字

git tag 

#Example
git tag V0.1

git show V0.1  #你不会看到额外的标签信息,只有提交信息

附注标签(annotated)

附注标签是存储在 Git 数据库中的一个完整对象,它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证,一般使用附注标签

git tag -a  -m "commit information"

#Example
git tag -a V1.0 -m "my version 1.0"

git show V1.0 # 输出显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息

后期打标签

可以对过去的提交打标签

git tag -a  

#Example
git tag -a v1.2 9fceb02d0ae598e95dc970b74767f19372d61af8 #给0x9fceb02...那次提交打tag

推送标签到共享服务器上

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。在创建完标签后你必须显式地推送标签到共享服务器上

git push origin 

git push origin --tags # 将会把所有不在远程仓库服务器上的标签全部传送到那里

删除标签

git tag -d 

上述命令并不会从任何远程仓库中移除这个标签,需使用以下命令

git push origin --delete 

检出标签

如果你想查看某个标签所指向的文件版本,可以使用git checkout命令

git checkout V1.0

不要单独使用git checkout 命令,这会使你的仓库处于“分离头 指针(detached HEAD)”的状态,在“分离头指针”状态下,如果你做了某些更改然后提交它们,标签不会发生变化,但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支

git checkout -b version2 V1.0

git 别名

git config --global alias. command

#Example 
git config --global alias.co checkout
git co      # 等价 git checkout

git config --global alias.last 'log -1 HEAD'
git last    #等价 git log -1 HEAD

git 分支

创建分支

git branch     # 此时HEAD指针仍在当前分支

切换分支

git checkout   # 从当前分支切换到
git checkout -b  #创建分支并且切换到该分支

合并分支

git merge          # 合并分支到当前分支下
git merge     # 将分支1合并到分支2

删除分支

git branch -d      # 删除分支

分支管理

分支前的 * 字符:它代表现在检出的那一个分支(也就是说,当前 HEAD 指针所指向的分支)

git branch			# 查看本地当前分支  
git branch -v       # 查看本地分支最近一次提交信息

--merged--no-merged过滤这个列表中已经合并或尚未合并到当前分支的分支。

远程分支

推送

本地的分支并不会自动与远程仓库 同步——你必须显式地推送想要分享的分支

git push  

如果你正在使用 HTTPS URL 来推送,Git 服务器会询问用户名与密码

如果不想在每一次推送时都输入用户名与密码,你可以设置一个 “credential cache”。 最 简单的方式就是将其保存在内存中几分钟,可以简单地运行 git config --global credential.helper cache 来设置它。

切换

git checkout -b    #从创建本地分支并且切换到该分支

#Example
git checkout -b serverfix origin/serverfix

查看远程分支

git branch -a 		# 查看所有分支(本地与远程仓库)

git branch -vv      # 查看本地分支关联的远程仓库分支  

拉取远程分支

git pull            #等同于git fetch 与 git merge

删除远程分支

git push origin --delete 

补丁

生成补丁

git format-patch -M origin/master # -M选项允许 Git 检查是否有对文件重命名的提交

git format-patch HEAD^  # 生成最近的1次commit的patch
git format-patch -1     # 同上

应用补丁

1.git apply

git apply 命令采用了一种“全部应用,否则就全部撤销(apply all or abort all)”的模型, 即补丁只有全部内容都被应用和完全不被应用两个状态 并且,它不会为你创建提交——在运行之后,你需要手动暂存并提交补丁所引入的更改

git apply 

在实际应用补丁前,使用 git apply 来检查补丁是否可以顺利应用—,使用 --check 命令

git apply --check 

如果没有产生输出,则该补丁可以顺利应用。如果检查失败了,该命令还会以一个非零的状态退出,所以需要时你也可以在脚本中使用它

2.git am

应用一个由 format-patch命令生成的补丁,你应该使用git am命令(该命令的名字am表示它“应用(Apply)一系列来自邮箱(Mailbox)的补丁”)

git am 会使补丁被顺利地应用,并且为你自动创建了一个新的提交

git am 

SSH公钥生成

  1. 进入~/.ssh目录,如果不存在改目录,则创建

mkdir .ssh #不存在才创建
cd ~/.ssh/
  1. 生成邮箱公钥 停顿处直接回车(总共3次)

git config --global user.name   #没有设置才设置
git config --global user.email
ssh-keygen -t rsa -C "your email address" #直接次回车

#Example
ssh-keygen -t rsa -C "[email protected]"
  1. 生成的秘钥就保存在刚刚的.ssh文件夹下,其中id_rsa.pub就是公钥

你可能感兴趣的:(pytorch系列,git)