安装git
mac
和ubuntu
下应该都是自带git
的,如果没有可以用下面的指令安装。windows
下建议使用加强版终端Cmder
,是自带git
命令的。
1 2 |
sudo apt-get install git |
基本操作
git
的基本操作包括如何初始化一个空的git
项目、如何clone
别人的项目,查看文件修改状态,在本地提交更改和与远程服务器同步等等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
git init # 初始化一个git仓库 git clone https://github.com/username/***.git # 将远程仓库克隆到本地 git status # 查看状态 git diff # 查看更改的情况 git commit -a -m 'commit' # 提交,commit为备注 git commit -o a.py b.py -m 'commit' # 只提交指定的文件 git push origin master # 提交到远程服务器 git pull # 从服务器更新代码到本地 git reflog # 查看版本日志 git log # 查看详细日志 |
文件添加与撤销修改
新文件需要使用git add
添加之后才会追踪,git add
添加的文件可以使用git reset
撤销添加。
有时候我们对着代码一通操作以后又感觉不太行得通,想要放弃更改回到上一次commit
的状态,这时可以用git reset --hard
放弃所有文件的更改,也可以用git checkout -- 文件路径
放弃某个文件的更改。
1 2 3 4 5 6 |
git add . # 添加所有文件 git reset filename # 取消添加使用git add添加的文件 git reset --hard # 放弃所有文件的修改,回到上一次commit git checkout -- filename # 放弃某个文件的修改 |
分支操作
分支操作是相对进阶的操作,有时我们要在一个版本的基础上做不同方向的更改,可以再main
分支的基础上新建多个分支。
1 2 3 4 5 6 7 8 9 10 11 |
git branch # 查看分支 git checkout -b develop # 新建分支(相当于git branch develop和git checkout develop两条命令) git checkout master # 切换到master分支 git merge --no-ff develop # 将当前分支与develop分支合并 git pull origin develop # 注意要先切换到develop分支再pull git branch -d develop # 删除develop分支 |
添加tag & 发布release
1 2 3 4 5 |
git tag # 查看标签 git tag -a v0.0.1 6625a14 # 给历史的版本打一个标签🏷 git push origin v0.0.1 # 发布release |
恢复到之前的版本
取消某些版本的更改一般使用的是git reset
和git revert
指令。
两者的区别在于:git reset
是回到之前的某一个版本,之后的版本都丢弃。而git revert
是撤销某一个版本的更改(也就是把某个版本反向操作一遍, 添加的都删除,修改的都复原),之后和之前版本的修改全部都会保留。
1 2 3 4 5 |
git reset --hard 46fe3c # 回到某个版本(之后提交的版本都会被永久删除) git push -f # 将远程强制同步,此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧 git revert -n 8b8962 # 某个版本不需要了,撤销某个版本,而不影响其他的版本 |
统计代码行数
1 2 |
git log --author="xyu" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' - |
手动合并冲突
在我们使用git
的时候尽量不要在不同的设备上同时修改相同的文件,如果修改了相同的文件出现了冲突,我的建议是先把本地和远程冲突的文件复制一份到其他目录,然后运行git reset --hard
恢复这些文件后,再运行git pull
,把远端的同步到本地,最后再根据自己之前备份的文件做合并。
下面这种合并方式也可以,但是对于新手是不推荐的:
1 2 3 4 5 6 7 8 9 |
git stash # 暂存本地的修改 git pull git stash pop stash@{0} # 合并 """ 在冲突的文件中 updated upstream是从远端服务器同步的 stashed changed 是本地贮藏的修改 手动修复冲突的部分以后保存一下再commit和push就行了。 """ |