配置
git init
cat ~/.gitconfig
# 格式
git config --global alias.<alias> '代替的命令'
# 例如(使用cm代替commit -m)
git config --global alias.cm 'commit -m'
# 格式(全局)
git config --global user.name "username"
git config --global user.email "email"
# 修改(全局)
git config --replace-all user.name "username"
git config --replace-all user.email "email"
# 关闭git忽略大小写配置
git config core.ignorecase false
添加远端
git remote
# 或
git remote -v
git remote add <origin_name> <demo_git_address>
git push -u origin master
# 第一次推送master分支的所有内容,以后使用如下命令即可
git push
git remote rm <origin_name>
git基本操作
git add .
git commit -m <commit_content_description>
git push <origin_name> <branch_name>
git pull <origin_name> <branch_name>
git fetch --all && git reset --hard <origin_name>/<branch_name> && git pull <origin_name> <branch_name>
分支的使用总结与注意
- 注意:不能子分支之间合并,也不能把子分支合并到主分支上,只能子分支合并(
merge)主分支(master),主分支上一般修改通用功能,子分支上只是修改本分支上的独有功能,若想把这个分支独有功能移植到主分支,可以使用 git stash 功能;
- 从分支拉取代码方式
git clone -b <branch_name> <demo_git_address>
git switch -t <origin/branch_name>
git branch <branck_name>
git branch -a
git switch <branch_name> || git checkout <branckName>
git switch -c <branck_name> || git checkout -b <branck_name>
git merge <branck_name>
git branch -D <branck_name>
git push origin --delete <branch_name>
git push <origin_name> <current_branch_name>:<origin_branch_name>
stash的使用总结与注意
- 注意:
git add 只是把文件加到git 版本控制里,并不等于就被 stash 起来了, git add 和 git stash 没有必然的关系,但是执行 git stash 能正确存储的前提是文件必须在git 版本控制中才行;
- 添加stash
git stash
# 添加说明使用如下
git stash save <stash_name>
# stach 未跟踪的文件
git stash -u
git stash list
# 默认显示第一个
git stash show
# 显示其他的
git stash show stash@{num}
# 例如(显示第二个)
git stash show stash@{1}
# 默认使用第一个存储
git stach apply
# 使用其他存储
git stash apply stash@{$num}
# 例如(使用第二个)
git stash apply stash@{1}
# 默认弹出第一个存储
git stach pop
# 弹出其他存储
git stash pop stash@{$num}
# 例如(弹出第二个)
git stash pop stash@{1}
# 默认删掉第一个
git stach drop
# 删除指定
git stash drop stash@{$num}
# 例如(删除第二个)
git stach drop stash@{1}
git stash clear
撤销&回退
# 格式(注:不要忘记中间的"--",不写就成了检出分支了!)
git checkout -- filepathname
# 例如:
git checkout -- readme.md
# 放弃所以的缓存可以使用
git checkout .
# 格式
git reset HEAD filepathname
# 例如:
git reset HEAD readme.md
# 放弃所以的缓存可以使用
git reset HEAD .
# 回退到上一次commit的状态
git reset --hard HEAD^
# 此命令可以用来回退到任意版本
git reset --hard <commitid>
# 使用如下命令来查看提交历史
git log
# 删除 untracked files
git clean -f
# 连 untracked 的目录也一起删掉
git clean -fd
# 连 gitignore 的untrack文件/目录也一起删掉(慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
# 在用上述 git clean前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
复制其他分支
# 格式 (注:复制后,自动commit了,所以只是需要push就行)
git cherry-pick <commitid>
# 若不想自动提交,可以添加参数--no-commit 如:
git cherry-pick <commitid> --no-commit
# 格式
git checkout <other_branch> <filepathname>
# 例如
git checkout master assets/Game/Scripts/Views/GameContol.ts
# 格式
git checkout --patch <branch_name> <filenamepath>
# 例如
git checkout --patch branchB test.c
...
Apply this hunk to index and worktree [y,n,q,a,d,/,K,g,e,?]?
y - 存储这个hunk
n - 不存储这个hunk
q - 离开,不存储这个hunk和其他hunk
a - 存储这个hunk和这个文件后面的hunk
d - 不存储这个hunk和这个文件后面的hunk
g - 选择一个hunk
/ - 通过正则查找hunk
j - 不确定是否存储这个hunk,看下一个不确定的hunk
J - 不确定是否存储这个hunk,看下一个hunk
k - 不确定是否存储这个hunk,看上一个不确定的hunk
K - 不确定是否存储这个hunk,看上一个hunk
s - 把当前的hunk分成更小的hunks
e - 手动编辑当前的hunk
? - 输出帮助信息