Git 常用命令
Aug 16, 2022Notes
创建分支
git branch -a//看所有分支
git branch branchName//在本地新建一个分支
git checkout -b branchName //新创建分支并切换
git checkout branchName//切换到你的新分支
git push origin branchName//将新分支发布在github上
git branch -d branchName//在本地删除一个分支
git push origin :branchName//github远程端删除一个分支,分支名前的冒号代表删除
git branch -a//看所有分支
git branch branchName//在本地新建一个分支
git checkout -b branchName //新创建分支并切换
git checkout branchName//切换到你的新分支
git push origin branchName//将新分支发布在github上
git branch -d branchName//在本地删除一个分支
git push origin :branchName//github远程端删除一个分支,分支名前的冒号代表删除
git更新本地远程分支列表
使用情况:git branch -a 不出现远程新的分支或者远程已经没有的分支在本地还有。
git remote update origin --prune //更新本地的git分支保持和远程分支一致
git fetch origin //同步远程服务器上的数据到本地
git remote update origin --prune //更新本地的git分支保持和远程分支一致
git fetch origin //同步远程服务器上的数据到本地
将本地仓库推送到空的远程仓库
git remote add origin https://github.com/...
git add . // git add * 添加文件会把忽略的文件也添加进去
git commit -m 'first commit'
git push origin master
git remote add origin https://github.com/...
git add . // git add * 添加文件会把忽略的文件也添加进去
git commit -m 'first commit'
git push origin master
commit不忽略空文件夹
如,现在在本地仓库中存在空文件夹 data,且 git push 的时候不想忽略他。
- 在 data 文件夹下打开
git bash输入touch .gitkeep创建.gitkeep文件.gitkeep文件能够保证空文件夹能够保留.gitkeep文件内容可以写上备注(不写也可)
# Ignore everything in this directory
*
# Except this file !.gitkeep
# Ignore everything in this directory
*
# Except this file !.gitkeep
- 在
.gitignore中添加
data/*
!data/.gitkeep
data/*
!data/.gitkeep
添加文件提交到远程仓库的一般流程:
git add (file name)
git commit -m "对本次修改的描述" //如果不commit 后面无法push
git remote add test https://github.com/xutinting/test.git //修改远程仓库名,便于后面使用
git push test main //将本地分支push到远程的main分支上,似乎本地分支名要和远程分支名一样才能推送?
git pull test main //修改后的main分支pull到本地仓库
git switch -c dev //在本地创建并切换到新的dev分支
git push test dev //在本地修改dev分支后,向远程推送dev分支,此后远程仓库会出现和本地仓库同名的dev分支
git add (file name)
git commit -m "对本次修改的描述" //如果不commit 后面无法push
git remote add test https://github.com/xutinting/test.git //修改远程仓库名,便于后面使用
git push test main //将本地分支push到远程的main分支上,似乎本地分支名要和远程分支名一样才能推送?
git pull test main //修改后的main分支pull到本地仓库
git switch -c dev //在本地创建并切换到新的dev分支
git push test dev //在本地修改dev分支后,向远程推送dev分支,此后远程仓库会出现和本地仓库同名的dev分支
仓库连接使用 https 或者 ssh 步骤类似,ssh 在 push 和 pull 时会提示输入我的 ssh 密码。
对于一个新的本地仓库来说,若要推送到远程仓库,须先对本地仓库进行 init 、add、commit等操作。我先 remote add 添加远程分支后再上传文件,会显示远程对应分支不存在。
merge分支
比如我在新建的 dev 分支做了修改,现在需要合并到其他分支,如 main 分支。
git checkout dev //如果当前就在 dev 分支则不需要
git pull //拉取当前分支最新代码
git checkout main //切换到需要合并的分支
git merge dev //将 main 分支和 dev 合并
git push //推送到远程仓库
git checkout dev //如果当前就在 dev 分支则不需要
git pull //拉取当前分支最新代码
git checkout main //切换到需要合并的分支
git merge dev //将 main 分支和 dev 合并
git push //推送到远程仓库
当在 main 分支合并 dev 分支时如果遇到报错:
$ git merge dev
fatal: refusing to merge unrelated histories
$ git merge dev
fatal: refusing to merge unrelated histories
应当执行[link]:
$ git pull origin dev --allow-unrelated-histories
$ git merge dev
$ git push
$ git pull origin dev --allow-unrelated-histories
$ git merge dev
$ git push
删除分支
删除远程分支: 默认分支不能删除,其他分支若要删除,则(以dev为例):
git branch -r //查看远程分支
git push --delete origin dev
git branch -a //查看所有分支
git branch -m dev main //修改本地分支dev为main
git push origin main //推送改过名字的本地分支
git branch -r //查看远程分支
git push --delete origin dev
git branch -a //查看所有分支
git branch -m dev main //修改本地分支dev为main
git push origin main //推送改过名字的本地分支
文件、文件夹的删除
git删除远程分支包括两种情况:
- 仅仅删除远程分支文件,不删除本地的文件; 删除远程文件 filename:
git rm --cached filename
git commit -m "delete remote file filename "
git push -u origin master(此处是当前分支的名字)
git rm --cached filename
git commit -m "delete remote file filename "
git push -u origin master(此处是当前分支的名字)
删除远程文件夹 directoryname:
git rm -r --cached directoryname
git commit -m "delete remote directory directoryname "
git push -u origin master(此处是当前分支的名字)
git rm -r --cached directoryname
git commit -m "delete remote directory directoryname "
git push -u origin master(此处是当前分支的名字)
- 删除远程分支文件的同时,删除本地的文件。 删除文件 filename:
git rm filename
git commit -m "delete file filename "
git push -u origin master(此处是当前分支的名字)
git rm filename
git commit -m "delete file filename "
git push -u origin master(此处是当前分支的名字)
删除文件夹directoryname:
git rm -r directoryname
git commit -m "delete directory directoryname "
git push -u origin master(此处是当前分支的名字)
git rm -r directoryname
git commit -m "delete directory directoryname "
git push -u origin master(此处是当前分支的名字)
删除本地文件/文件夹并推送到远程分支
//文件
git rm 文件名
git commit -m "delete ..."
...
//文件夹
git rm -r --cached 文件夹名
git commit -m "remove ..."
...
//文件
git rm 文件名
git commit -m "delete ..."
...
//文件夹
git rm -r --cached 文件夹名
git commit -m "remove ..."
...
删除某次commit记录(回滚代码)
git log //查看需要回滚的版本号
git reset --hard <需要回退到的版本号(只需要输入前几位)>
git push origin <分支名> --force
git log //查看需要回滚的版本号
git reset --hard <需要回退到的版本号(只需要输入前几位)>
git push origin <分支名> --force
强制将远程分支覆盖本地分支
//多条命令,推荐
git fetch --all
git reset --hard origin/master //将远程分支master覆盖本地
git pull
//单条,仅了解
git fetch --all && git reset --hard origin/master && git pull
//多条命令,推荐
git fetch --all
git reset --hard origin/master //将远程分支master覆盖本地
git pull
//单条,仅了解
git fetch --all && git reset --hard origin/master && git pull
本地分支覆盖远程分支
git init //要先初始化本地仓库
git push origin master --force //覆盖远程分支origin master
git init //要先初始化本地仓库
git push origin master --force //覆盖远程分支origin master
本地仓库查看 log 日志不显示最新状态
git remote update //本地仓库更新,拿到远端的所有元数据
git log origin/branch
git remote update //本地仓库更新,拿到远端的所有元数据
git log origin/branch
对比查看2个分支的差异
显示分支中差异部分
git diff branch1 branch2 --stat
git diff branch1 branch2 --stat
显示指定文件详细差异
git diff branch1 branch2 具体文件路径
git diff branch1 branch2 具体文件路径
显示出所有有差异的文件的详细差异
git diff branch1 branch2
git diff branch1 branch2
查看branch1分支有,而branch2中没有的log
git log branch1 ^branch2
git log branch1 ^branch2
查看branch2中比branch1中多提交了哪些内容
git log branch1..branch2
git log branch1..branch2
不知道谁提交的多谁提交的少,单纯想知道有什么不一样
git log branch1...branch2
git log branch1...branch2
.gitignore
忽略某些上传的文件或文件夹,创建 .gitignore 文件:
touch .gitignore
touch .gitignore
忽略规则:
target //忽略这个target目录
angular.json //忽略这个angular.json文件
log/* //忽略log下的所有文件
css/*.css //忽略css目录下的.css文件
target //忽略这个target目录
angular.json //忽略这个angular.json文件
log/* //忽略log下的所有文件
css/*.css //忽略css目录下的.css文件
其他
ssh失效或者忘记ssh密码
重新生成密匙:ssh-keygen -t rsa -C "your_email@example.com"
ERROR:ssh connect to host github.com port 22
似乎是没有成功认证用户,参考文章解决。在存放公钥私钥的同级文件夹中,新建 config 文本,内容为:
Host github.com
User git邮箱地址
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443
Host github.com
User git邮箱地址
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443