Git使用
配置
git config --global --list #显示所有的设置
git config --global init.defaultBranch master #设置默认分支名
git config --global user.name "username" #用户名
git config --global user.email "[email protected]" #邮箱
修改git的编辑器
git
默认的编辑器为nano
,不常用,需要修改为vim,方法如下:打开. git/config文件,在core中添加editor=vim即可
基本命令
- 将文件写入暂存区
git add file
- 将文件推送到远程仓库
git push origin master
- 文件提交到仓库
git commit -m ""
- 拉取/获取 远程仓库代码
git pull origin master #自动合并
git fetch origin master #手动合并
- 查看当前状态
git status
git status -s
本地仓库推送
token
- 新建的仓库
git init
git add .
git commit -m "first commit"
git remote add origin "https://<token>@github.com/<...>"
git remote set-url origin ...
git push -u origin master
- 已有仓库
git remote add origin "https://<token>@github.com/<...>"
git push -u origin master
- remote
git remote set-url origin ... #覆盖此链接
git remote set-url --add origin ... #追加链接
git remote set-url --delete origin ... #删除链接
git remote -v #查看所有
- 重命名commit
git commit --amend -m ""
ssh
cd ~/.ssh
ssh-keygen -t rsa -C "[email protected]"
# id_rsa.pub config for git remote setting
git 忽略文件
- .
gitignore
log/* #忽略log下所有文件
!log/read.txt #除了read.txt
src/*.c #忽略所有.c
- 强制忽略命令
git update-index --assume-unchanged <files> #强制忽略
git update-index --no-assume-unchanged <files> #取消忽略
有时候上传远程仓库之后发现不小心把应该要忽略的文件或目录给push上去了(如.idea目录),这时候再去编辑project目录下的.gitignore文件并添加忽略已经不起作用了,因为.gitignore只对从来没有commit过的文件起作用。
这时我们可以通过git命令删除已提交的文件或目录,命令如下:
git rm --cached -r .idea
然后编辑project目录下的.gitignore文件(不同位置文件或目录的忽略编辑不同位置的.gitignore文件),比如添加忽略.idea目录,如下:
.idea
在.gitignore文件里边添加上面的内容,然后再进行commit和push,这样就删除了远程的已提交的内容,这样下次提交的时候就不会再提交上面忽略的内容了。
更新仓库
git add .
git commit -m update
git push
工作区与暂存区
Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:
git log查看
git help log #查看帮助
git log -p -1 #显示最近一条提交 并显示内容
git log --oneline #简化显示每个版本只有一行
git log --author tiandeng0702 #按作者查找
git 撤销操作
git reset HEAD <file> #取消暂存
git reset --soft HEAD^ #撤销commit
git checkout -- <file> #撤销修改 慎用
git 原位替换
将多次提交合并成一个commit
git commit --amend
git commit -m 'initial commit'
git add <forgotton_file>
git commit --amend
git 版本回退(git reset)
git reset --soft <HEAD_NAME> #撤销到指定版本 保留从<HEAD_NAME>上一次修改后的文件以及暂存区
git reset --hard HEAD^ #撤销到上一个版本 保留从上一次修改后的文件以及暂存区
git reset --hard <HEAD_NAME> #撤销到指定版本 不保留任何修改的文件
git reset --hard HEAD^ #撤销到上一个版本 不保留任何修改的文件
git reset --mixed <HEAD_NAME> #撤销到指定版本 保留从<HEAD_NAME>上一次修改后的文件,不保留暂存区
git reset --mixed HEAD^ #撤销到上一个版本 保留从上一次修改后的文件,不保留暂存区
# --hard 慎用,但是即使回退之后也有办法回溯
git reflog #查看所有历史记录,找到误操作的 <HEAD>
git reset --hard <HEAD> #恢复误操作之前的最新版本
git 差异(git diff)
git diff #显示工作区与暂存区的差异
git diff HEAD #显示工作区与版本库的差异
git diff --cached #显示暂存区与版本库的差异
git diff <HEAD1> <HEAD2> <file> #比较两个版本之间的某个 <file> 的差异
git diff <HEAD1> <HEAD2> #比较两个版本之间的差异
git diff HEAD^ HEAD #比较当前版本与上一个版本差异
git diff HEAD~ HEAD #比较当前版本与上一个版本差异
git diff HEAD~2 HEAD #比较当前版本与上两个版本差异
git diff HEAD~3 HEAD #比较当前版本与上三个版本差异
git 删除文件(git rm)
#使用 rm file 只删除文件,暂存区会显示红色的delete, 需要git add file更新暂存区
git rm file #删除文件同时更新暂存区
git rm --cached file #只删除暂存区,文件保留在工作区
git 打标签
#当前提交打标签
git tag -a v1.0 -m "add v4l2_cam" #创建附注标签
git tag -a v1.1 #创建轻量标签
git tag -l #显示所有标签
git push origin v1.0 #推送
git tag -d <tagname> #删除标签
git push origin --delete <tagname> #一条命令删除线上和本地
#以前版本打标签
git tag -a v0.9 <HEAD>
git 别名
git config --global alias.st status
git 分支
git branch #查看分支
git branch <branch name> #直接创建分支
git checkout -b <branch name> #切换并创建分支
git checkout <branch name> #切换分支
git switch #此命令用于替换checkout, 因为checkout 还有恢复功能,switch 可以防止分支名和文件名冲突
git 合并分支
##合并分支,之前先处在主分支
git checkout master
git merge <branch name> #合并分支 不会显示geature,只保留单条分支记录
git merge -no-ff <branch name> #可以保存之前的分支历史,能更好查看merage历史,以及branch状态
git branch -d <branch name> #分支删除,必须在合并主线之后才可以删除
git branch -D <branch name> #分支删除,不合并到主线也能删除
git push origin --delete <branch name> #远端删除分支
git log --graph --oneline --decorate --all #图形显示分支状态
git rebase <branch name> #另一种合并方式,不保留分支历史
分支冲突解决
假设一个文件在 master
中修改一行,它的分支 dev
也修改了同一行
- 最开始 master 中的 代码
#include <stdio.h>
int main()
{
printf("world\n");
return 0;
}
- 分支dev 修改的代码
#include <stdio.h>
int main()
{
printf("Go to hell world\n");
return 0;
}
- 主分支master 修改的代码
#include <stdio.h>
int main()
{
printf("Hello world\n");
return 0;
}
* ecbf279 (HEAD -> master) master commit
| * 6ec5a07 (dev) dev commit
|/
* 5dbad6e init master
开始合并
ubuntu@rtsp:~/test (master)$ git merge dev master
Auto-merging main.c
CONFLICT (content): Merge conflict in main.c
Automatic merge failed; fix conflicts and then commit the result.
#出现了冲突
#############################################################################
git status # 使用 git status 查看冲突
On branch master
You have unmerged paths.
(fix conflicts and run "git commit") # 1. 修改冲突 然后 git commit
(use "git merge --abort" to abort the merge) # 2. git merge --abort 取消合并
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: main.c
no changes added to commit (use "git add" and/or "git commit -a")
#############################################################################
git diff # 查看具体冲突
diff --cc main.c
index 60aec82,31fae3c..0000000
--- a/main.c
+++ b/main.c
@@@ -2,6 -2,6 +2,10 @@@
int main()
{
++<<<<<<< HEAD
+ printf("Hello world\n");
++=======
+ printf("Go to hell world\n");
++>>>>>>> dev
return 0;
}
##############################################################################
vim main.c #进行修改
#include <stdio.h>
int main()
{
printf("Hello and Got to hello world\n");
return 0;
}
git add.
git commit -m "merg dev"
* f653c84 (HEAD -> master) merg dev
|\
| * 6ec5a07 (dev) dev commit
* | ecbf279 master commit
|/
* 5dbad6e init master
然后删除或者保留 dev
分支
git 回退 (git checkout)
git checkout -b <brance_name> <HEAD>
#e.g.
git chechout -b dev b4d551wad5ad8841
命令行显示git分支
function git_branch {
branch="`git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //"`"
if [ "${branch}" != "" ];then
if [ "${branch}" = "(no branch)" ];then
branch="(`git rev-parse --short HEAD`...)"
fi
echo " ($branch)"
fi
}
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(git_branch)\[\033[00m\]\$ '
export PS1
转自 https://www.icetdpl.com/posts/Git使用/
标签:HEAD,git,--,Git,master,branch,使用,commit From: https://www.cnblogs.com/icetdpl/p/17867217.html