1.基本命令
git config --global user.email xxx@rd.netease.com
git config --global user.name xxx
$cat .gitconfig
[user]
email = xxx@rd.netease.com
name = xxx
git branch v1
git branch -D v1
git push --set-upstream origin v1:v1 //将本地v1分支推送到远程仓库origin的分支v1
git push origin v1:master //将本地v1分支推送到远程仓库origin的分支master分支
git push origin --delete v1
git add filename
git rm filename
git cherry -v
git fetch origin master + git merge FETCH_HEAD(手动merge) = git pull(自动merge)
参考文档:
https://weixin110.qq.com/cgi-bin/mmspamsupport-bin/newredirectconfirmcgi?main_type=1&evil_type=110&source=2&bancode=83f6a5515ac2c5310595fce64d4c7fdace76267dac6b2e1a742cb12ff17d59fffd5a0e171fd768c0332fa402160612ab65e7dc4f25c968ea4e70ca9782fbab70&scene=1&devicetype=Windows+10+x64&click=3b628e8e39ed5efdac21b815976df718
git push origin HEAD:refs/for/master
git push 肯定是推送
origin : 是远程的库的名字
HEAD: 是一个特别的指针,它是一个指向你正在工作的本地分支的指针,可以把它当做本地分支的别名,git这样就可以知道你工作在哪个分支
refs/for :意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的
参考文档:
https://blog.csdn.net/u010312474/article/details/107915694
2.常用命令
git remote -v
origin xxxx (fetch)
origin xxxx (push)
git remote add test url //由于已经有origin,因此如果git remote add origin会报错
//查看添加后的结果
git remote -v
origin xxx (fetch)
origin xxx (push)
test xxx (fetch)
test xxx (push)
git push test master:master
(1)首先查看当前本地分支指向的是哪个远程仓库的哪个分支
git branch -vva
* master 7a7d47f [origin/master] feat:add debug function //当前指向为origin/master
remotes/origin/master 7a7d47f feat:add debug function
remotes/test/master 7a7d47f feat:add debug function
(2)切换分支某个仓库下的某个分支,当进行切换时必须是分支是存在的,否则在切换时报错
git branch --set-upstream-to=test/master
git branch -avv
* master 7a7d47f [test/master] feat:add debug function //当前指向为test/master
test 7a7d47f feat:add debug function
remotes/origin/master 7a7d47f feat:add debug function
remotes/test/master 7a7d47f feat:add debug function
git remote remove test
git show commitId(例如:01efe3050bfb914e3c89ddbec4f94506de0aae1b)
git show commitId --stat
git show 7a7d47f6cc1b373ca43151a4a4d33419b384ca5c main.cpp
git log main.cpp
git log --pretty=oneline main.cpp
git log -p main.cpp
git diff 01efe3050bfb914e3c89ddbec4f94506de0aae1b 7a7d47f6cc1b373ca43151a4a4d33419b384ca5c
git log --name-status
git log --author="zk"
参考文档:
git 查看某一个文件的(提交/修改)记录
https://blog.csdn.net/qq_31811537/article/details/102929395
//git查看某次提交/更新所更改的文件
https://blog.csdn.net/dclnet/article/details/50721406?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=3e6d09ff-e0b8-4b9c-b4e6-1b6e6ae68e6c&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
工作区 -(通过git add 命令进入)-> 暂存区 -(通过git commit 命令)-> 本地分支
工作区:即自己当前分支所修改的代码,git add 之前的,不包括git add 和git commit之后的
暂存区:已经git add 且未git commit的
本地分支:已经git commit提交到本地分支的
对于工作区的文件:
(1)新增加的文件(从未进行过git add操作),并未进入git的管理,直接进行增删改查即可
(2)对于已经进行过git commit的文件,在次提交基础上就行修改的,但是还未进行git add操作的,使用 git checkout filename 命令就行恢复最近的一次提交
git checkout 丢弃某个文件的修改
git checkout . 丢弃全部
对于在暂存区的文件:
(1)已经进行git add操作,但是并未进行commit操作
git reset HEAD . 或者 git reset HEAD filename
备注:
这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化
对于本地分支:
commit到了本地分支,但是没有git push到远程
git log //得到你需要回退一次提交的commit id
//下面两个都是不保留之前已经提交的文件
git reset --hard commitid //恢复到某一次的提交
git reset --hard HEAD~1 //恢复到最近的一次提交
//下面两个都是保留已经提交的文件
git reset commitid //恢复到某一次的提交
git reset HEAD~1 //恢复到最近的一次提交
对于已经提交远程的仓库:
(1)通过git reset是直接删除指定的commit
git log //得到你需要回退一次提交的commit id
git reset --hard <commit_id>
git push origin HEAD --force //强制提交一次,之前错误的提交就从远程仓库删除
(2)通过git revert是用一次新的commit来回滚之前的commit
git log //得到你需要回退一次提交的commit id
git revert <commit_id>
(3)git revert 和 git reset的区别
git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留;
git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除
git checkout master //切换到主分支
git pull //从服务端拉取最新代码
git checkout local //切换到本地分支
git rebase master---->如果遇到冲突,解决冲突 git add xxx --->git rebase --continue //解决问所有冲突后,使用该命令继续,当遇到冲突时,可以使用git branch查看当前所在的分支,会默认生成一个分支,当执行该命令没有冲突后,会自动切换到当前分支
git checkout master //切换到主分支
git merge local //合并local分支到主分支
git push //提交代码
重要的参考文档:
https://www.cnblogs.com/daxiong225/p/13472125.html
Git撤销&回滚操作(git reset 和 get revert)
https://www.cnblogs.com/daxiong225/p/13472125.html
Git恢复之前版本的两种方法reset、revert(图文详解
https://blog.csdn.net/yxlshk/article/details/79944535
(3)合并相关命令
git rebase 与 git merge都能进行合并代码
实际应用中具体操作如下:
(1)和远程仓库同步当前分支的时候使用git pull origin master --rebase //从远程分支进行合并代码
(2)合并分支的时候使用(处于其他分支,例如test分支) git rebase master(将master分支代码合入进当前分支),如果在主分支(master分支)git merge test(将test分支代码合入进master分支)
参考文档:
git rebase简介(基本篇)
https://blog.csdn.net/hudashi/article/details/7664631/
如何使用Git Rebase
https://segmentfault.com/a/1190000019455172
git在工作中正确的使用方式----git rebase篇
https://blog.csdn.net/nrsc272420199/article/details/85555911
使用git rebase合并多次commit
https://blog.csdn.net/yangcs2009/article/details/47166361
//将几次提交合并成一次进行提交
git rebase -i <commit>
https://www.cnblogs.com/jmcui/p/9723272.html
Git仓库.git文件夹目录介绍
https://blog.csdn.net/songyuequan/article/details/82933745
//当新建文件时会出现一下信息: git status 出现下列情况表示是新文件,没有被add过,是为跟踪的意思
Untracked files:
(use "git add <file>..." to include in what will be committed)
bb
//git status会出现下列情况git add过的文件,即跟踪文件,再次修改没有add,就是没有暂存的意思
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: xxx
//对于已经git add后,会出现以下信息
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: bb
//对于已经add后的文件,并且在此基础又进行了修改,git status会出现以下信息
Changes to be committed: //已经git add后的,等待commit的
(use "git restore --staged <file>..." to unstage)
modified: bb
Changes not staged for commit: //等待git add的
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: bb
(4) 保存临时文件
git stash
git stash list
git stash pop
git stash apply
git stash drop + stash名字
git stash clear
参考文档:
https://blog.csdn.net/qq_25135655/article/details/98945168
(5)git cherry-pick用法(可以从当前分支进行摘取也可以从其他分支进行摘取)
git cherry-pick commitid
git cherry-pick commitid1 commitid2 commiti3
git cherry-pick commitid1..commiti3
//基本用法
https://blog.csdn.net/libinbin147256369/article/details/80375977
//提交多个commitid
https://juejin.cn/post/6844903665506254855
$ git cherry-pick commitid
Auto-merging aa
CONFLICT (content): Merge conflict in aa
error: could not apply deda8b3... modify aa
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
//查看有哪些冲突文件
$ git status
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: aa
//修改好文件后,使用git add 表明已经解决好冲突
$ git add filename
//继续,会以cherry-pick的提交作为默认的提交,不用再次使用git commit命令进行提交
$ git cherry-pick --continue
(6)修改最新一次的提交
git add filename
git commit -m "add filename"
git add filename
git commit --amend
git push origin HEAD:refs/for/分支名
(7)tag的用法
git tag
git tag tagName 或者 git tag -a tagName -m "my tag" //可以带一些配置信息
git tag -a v1.0 commitid -m "my tag" //给某个提交打上tag
git show tagName
//删除本地tag
git tag -d tagName
//删除远端tag
git push origin :refs/tags/v1.0
git push origin tagName
git checkout tagName
参考文档:
https://blog.csdn.net/yang5726685/article/details/104395601/
(8)比较相关命令
//Git命令查看尚未提交(commit)的已修改文件的具体修改内容
1)默认显示尚未通过git add的文件版本与已经通过git add的但尚未提交的文件版本之间的差别
git diff [filename]
2)显示已经通过git add的但尚未提交的文件版本与最近一次提交的差别; --staged是--cached的别名,是同样的功能。
git diff --cached [filename]
git diff --staged [filename]
3)显示尚未通过git add的文件版本与最近一次提交的差别
git diff HEAD [filename]
参考文档:
https://blog.csdn.net/pengpengzhou/article/details/109333931