本地初始化一个项目
首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中。
git config --global --list 显示全部配置
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"
然后在你的需要初始化版本库的文件夹中执行:
初始化本地仓库
git init\
添加远程仓库
git remote add origin <你的项目地址>
注:项目地址形式为:http://git.oschina.net/xxx/xxx.git或者 git@git.oschina.net:xxx/xxx.git
这样就完成了一次版本你的初始化。
如果你想克隆一个项目,只需要执行:
git clone <项目地址>
进入你已经初始化好的或者克隆项目的目录,然后执行:
#同步远程仓库
git fetch [remote]
#拉取远程仓库合并
git pull origin master
添加需要追踪的文件或目录
#添加当前目录下的文件和目录到暂存区(使用git来进行追踪管理)
git add .
#提交到版本库(还在本地)
git commit -m "第一次提交"
#推送到远程仓库(将改变远程仓库)
git push origin master
然后如果需要账号密码的话就输入账号密码,这样就完成了一次提交。
此时,你可以在你的个人面板、项目主页查看到你的提交记录,例如:http://git.oschina.net/oschina/git-osc/commit/f3dd1c5bae48fa4244e2595a39e750e5606dd9be](http://git.oschina.net/oschina/git-osc/commit/f3dd1c5bae48fa4244e2595a39e750e5606dd9be
按照本文档新建的项目时,在码云平台仓库上已经存在 readme 文件,故在提交时可能会存在冲突,这时您需要选择的是保留线上的文件或者舍弃线上的文件,如果您舍弃线上的文件,则在推送时选择强制推送,强制推送需要执行下面的命令:
git push origin master -f
如果您选择保留线上的 readme 文件,则需要先执行:
git pull origin master
然后才可以推送,如果发生冲突,则需要先解决冲突
使用ssh访问远程仓库时,每次访问要求输入短语密码:
Enter passphrase for /c/Users/Administrator/.ssh/id_ecdsa:
执行下面命令可无需每次输入密码
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_ecdsa
速查表:
详细参考:https://gitee.com/all-about-git
仓库
java
# 在当前目录新建一个Git代码库
$ git init
# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]
# 下载一个项目和它的整个代码历史
$ git clone [url]
配置
java
# 显示当前的Git配置
$ git config --list
# 编辑Git配置文件
$ git config -e [--global]
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
查看:
java
# 显示有变更的文件
$ git status
# 显示当前分支的版本历史
$ git log
# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat
# 美化历史打印
$ git log --graph --pretty=oneline --abbrev-commit
# 搜索提交历史,根据关键词
$ git log -S [keyword]
# 显示当前分支的最近几次提交
$ git reflog
添加&移除:
java
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p
# git add -A 保存所有的修改
# git add . 保存新的添加和修改,但是不包括删除
# git add -u 保存修改和删除,但是不包括新建文件。
# 删除工作区(本地)文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 删除工作区(本地)目录,并且将这次删除放入暂存区
$ git rm -r [dir]
# 停止追踪指定文件,但该文件会保留在工作区(本地)
$ git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
提交:
java
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
# 查看提交记录
$ git log
远程同步:
# 下载远程仓库的所有变动
$ git fetch [remote]
# 显示所有远程仓库
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show [remote]
# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
# 当本地和远程分支没有共同祖先时,强制拉取合并
$ git pull --allow-unrelated-histories [remote] [branch]
# 上传本地指定分支到远程仓库
$ git push [remote] [branch]
# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force
# 推送所有分支到远程仓库
$ git push [remote] --all
冲突:
# 当pull存在冲突时,使用--rebase解决冲突后合并
$ git pull --rebase [remote] [branch]
合并:
分支:
# 选择分支
git switch "branch"
git checkout [branch]
# 添加分支
git branch "name"
# 删除分支
git branch -d "branch"
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 分支重命名
git branch -m [old_branch_name] [new_branch_name]
标签:
撤销:
忽略:
在.git目录同级下创建.gitignore文件
.gitignore # 忽略自身
4.txt # 忽略名为4.txt的文件
project2 # 忽略名为project2的目录或文件
project3/ # 指定忽略名为project3的目录,叫project3的文件将不会被忽略
app* # 忽略前缀为app的文件或目录
.gitignore
常见配置
空格 不匹配任意文件,可作为分隔符,可用反斜杠转义
#开头 标识注释,可以使用反斜杠进行转义
!开头 标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 !也不会再次被包含。可以使用反斜杠进行转义
/结束 只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
/开始 匹配项目根目录
** 匹配多级目录,可在开始,中间,结束
* 通配多个字符;
? 通用匹配单个字符
[] 通用匹配单个字符列表
e.g.
匹配所有后缀为apk的文件
*.apk
匹配大小写首字母目录下的aa.meta文件
/[Aa]ssets/[Ss]treamingAssets/aa.meta
匹配aa目录下的全部文件和目录
/[Aa]ssets/[Ss]treamingAssets/aa/*
bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 忽略根目录下的bin文件
/*.c: 忽略根目录cat.c,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略当前路径的 config.php 文件
/mtk/do.c: 过滤某个具体文件
!/mtk/one.txt: 追踪(不过滤)某个具体文件
Android
*.iml
.gradle
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
Java
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
Unity
# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
#
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]ser[Ss]ettings/
# MemoryCaptures can get excessive in size.
# They also could contain extremely sensitive data
/[Mm]emoryCaptures/
# Recordings can get excessive in size
/[Rr]ecordings/
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
/[Aa]ssets/Plugins/Editor/JetBrains*
# Visual Studio cache directory
.vs/
# Gradle cache directory
.gradle/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D generated file on crash reports
sysinfo.txt
# Builds
*.apk
*.aab
*.unitypackage
*.app
# Crashlytics generated file
crashlytics-build.properties
# Packed Addressables
/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin*
# Temporary auto-generated Android Assets
/[Aa]ssets/[Ss]treamingAssets/aa.meta
/[Aa]ssets/[Ss]treamingAssets/aa/*