git基本操作

1.基本命令

# 配置邮箱和名称,实际配置是写~.gitconfig文件
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
	
# 创建本地分支v1
git branch v1

#删除本地分支
git branch -D v1

#新建了远程分支,在实际中使用git push 实际是把当前分支推送到了远程对应的分支上,git push的一般格式: git push 仓库名称 本地分支名称:远程分支名称
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

# 查看y有哪些提交要进行push
git cherry -v

# git fetch与git pull区别
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.常用命令

#仓库相关命令
	
#查看远程仓库,origin为默认的远程仓库的名称,origin:仓库名称 xxxx:仓库的url地址
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 远程仓库名称 本地分支:远程分支
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

#查看2次提交的变化,格式:git diff 旧id 新id
git diff  01efe3050bfb914e3c89ddbec4f94506de0aae1b 7a7d47f6cc1b373ca43151a4a4d33419b384ca5c

#git如何列出每次提交对应有哪些文件被修改
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>  # 撤销指定的版本,撤销也会作为一次提交进行保存,指定的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用法(可以从当前分支进行摘取也可以从其他分支进行摘取)

#合并单个commitid,进行该操作后commitid会发生变化
git cherry-pick commitid

#多个commitid方法
git cherry-pick commitid1 commitid2 commiti3

#将起commitid1 - commiti3直接的都进行合并,并不包括commitid1
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
git add filename

#使用以下命令后,提交的Change-Id不会,提交的commitId会发生变化,适用的场景是:不想要最近一次的提交记录,想重新修改提交
git commit --amend

git push origin HEAD:refs/for/分支名

(7)tag的用法

# 查看所有tag
git tag

# 增加tag
git tag tagName 或者 git tag -a tagName -m "my tag" //可以带一些配置信息

git tag -a v1.0 commitid -m "my tag" //给某个提交打上tag

# 查看tag的详细信息,重要的是commitid,可以根据commitid进行回溯   
git show tagName

# 删除tag
//删除本地tag
git tag -d tagName

//删除远端tag
git push origin :refs/tags/v1.0

# 上传tag
git push origin tagName

# 切换到某个tag
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值