GIt使用命令使用手册
命令集总结
新的git repo创建
git工具可以实现高效的项目管理;目前代码项目的管理大多采用git;首先我们需要在远端(remote)建立新的repo(仓库);具体实现见下面
//新建工程目录,创建新的工程,(以linux kernel为例)
mkdir kernel
//拷贝源码到该目录下(以linux为例)
cp -R /download/linux-kernel/ kernel/
//在远端remote端建立新的repo
创建成功后,可以找到相应的git repo远端网址https://github.com/xxx/xxx.git
//进入本地目录
cd kernel/
//使用git bash进行初始化
git init
//添加文件
git add .
//提交commit
git commit -s -m "first commit"
//链接本地工程和远端repo
git remote add origin https://github.com/xxx/xxx.git
//push本地代码到remote端repo
git push -u origin master
创建本地分支及远程分支
// 基本远程仓库的分支建立本地分支
git branch local-branch remote-branch
// 本地分支的切换
git branch //查看现已创建的本地分支
git checkout local-branch //切换到本地分支:local-branch
// 基于本地新建的分支,创建对应的远程分支
git push origin local-branch: remote-local-branch
// 关联本地分支和远程分支
git branch --set-upstream-to=origin/remote_branch local_branch
// 查看本地分支和远程分支是否关联
git status
//删除远程分支
git push origin --delete remote-local-branch
//删除本地分支
git branch -d|-D local-branch
//查看所有分支(远程和本地)
git branch -a
//查看本地所有分支
git branch
//查看远程所有分支
git branch -r
//基于远端repo的某个commit创建新的本地分支
git checkout -b local-branch commit-id
git rebase流程
git rebase主要用于同步和更新分支间的差异
举例:把remote-branch-B中的改动同步到remote-branch-A
// checkout到需要合并的分支remote-branch-B
git checkout remote-branch-B
git pull
// checkout到需要合并的分支remote-branch-A
git checkout remote-branch-A
git rebase remote-branch-B
git add .
git rebase --continue //有冲突
git add .
git commit -s -m "rebase remote-branch-A using remote-branch-B"
git push -f
查看git历史
通过git log相关可以查看git提交的历史情况
// 查看某个文件的修改历史
git log file-name
// 显示每次提交的diff
git log -p file-name
// 查看某次提交中的某个文件变化
git log commit-id file-name
//查看本地分支和远端对应分支的差异
git diff
git diff > diff.txt //输出差异文件到diff.txt
git中CRLF与LF的转换
在项目的开发中,可能会遇到不同系统的代码提交问题,这时会遇到LF/CRLF的转换,设置不当,会使得某些执行文件失去权限报错;所以尽量在开发前,先对git的使用环境进行设置;,其中就包括这一项:
// 提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true
// 提交时转换为LF,检出时不转换
git config --global core.autocrlf input
// 提交检出均不转换
git config --global core.autocrlf false
使用git修改文件权限
使用不同系统的git来管理代码时,可能会修改到文件的权限,导致文件无法正常执行;通过git命令修改文件,并且重新提交到远端;
// 修改文件权限为可执行文件
git update-index --chmod=+x filename
eg:git update-index --chmod=+x implement.sh
git diff查看修改,出现^M换行问题
在不同系统的git操作时,有时会遇到^M换行的问题,可以通过以下办法解决:
git config --global core.whitespace cr-at-eol
git屏蔽不必要的文件上传
1.在git repo根目录下创建.gitignore文件
touch .gitignore
2.利用notepad++打开编辑需要禁止的文件或文件夹
/a.txt //屏蔽根目录下的a.txt
/subdir //屏蔽子目录subdir及其内部所有文件
/subdir1/b.txt //屏蔽子目录sudir1下的文件b.txt
*.txt //屏蔽所有的txt文件
git撤销提交操作
在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset)、反做(revert);
1.git reset
git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,与git revert的区别在于,git reset不会创建新的commit,只会回退到之前存在的某个commit id
git reset --hard master
2.git revert
git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。
git revert流程
1.git add .
2.git commit -s -m "add test1.txt"
3.git push -f
4.git add .
5.git commit -s -m "add test2.txt"
6.git push -f
7.git log //查询 "add test1.txt"的commit id
8.git revert -n commit-id //revert "add test1.txt"
9.git commit -s -m "revert add test1.txt"
9.git push -f
10.git log //可以看到创建了一个新的commit"revert "add test1.txt""
1.在git repo根目录下创建.gitignore文件
touch .gitignore
2.利用notepad++打开编辑需要禁止的文件或文件夹
/a.txt //屏蔽根目录下的a.txt
/subdir //屏蔽子目录subdir及其内部所有文件
/subdir1/b.txt //屏蔽子目录sudir1下的文件b.txt
*.txt //屏蔽所有的txt文件
git打补丁(patch)
1.git diff生成的标准patch
branch A和branch B的base相同,例如把branch A的修改应用到branch B
git branch A
git diff A > patch
git branch B
git apply patch
git add .
git commit -a -m "Patch Apply"
git push -f
2.git format-patch生成的git专用补丁
git branch A
git format-patch -M A 0001.patch
git branch B
git am 0001.patch
git add .
git commit -a -m "Patch Apply"
git push -f
git打tag
tag是git版本库的一个标记,指向某个commit的指针。
tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 ...这样的标签。
tag感觉跟branch有点相似,但是本质上和分工上是不同的:
tag 对应某次commit, 是一个点,是不可移动的。
branch 对应一系列commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。
所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。
tag 和 branch 的相互配合使用,有时候起到非常方便的效果,例如:已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以检出 v2.0 的代码作为一个 branch ,然后作为开发分支。
1. 查询历史tag
git tag
2. 新增tag
git tag v1.0 //新增无备注的tag,默认在当前分支最后一个commit上添加tag
git tag -a v1.0 -m "tag备注" //新增有备注的tag,默认在当前分支最后一个commit上添加tag
git使用常用问题
1.删除远程分支出现:remote ref does not exist
1.解决办法一:清除远程分支的本地缓存
git fetch -p origin
2.解决办法二:
错误命令:git push origin --delete origin/xxx
不需要origin,修改为:git push origin --delete xxx
参考文档
https://www.cnblogs.com/wangwenhui/p/12141758.html