Git学习笔记

1. 安装Git及初始化Repository

全文参考廖雪峰网站,和自己的一些总结。

在Linux下,

$sudo apt-get install git

在Windows下,到Git官网下载安装https://git-scm.com/downloads

安装完后,在Git Bash里输入以下命令行完成设置,

$ git config --global user.name "Your Name"

$ git config --global user.email "email@example.com"

建立repository,

mkdir learngit
cd learngit
pwd
git init
git remote add origin git@github.com:xxx/learngit.git
git checkout -b develop origin/develop
git pull

2. Git常用基本命令

Head指向当前分支
master指向主分支

Add

git add readme.txt
git add --all

Commit

git commit -m "commit message"

Check Status

git status

Find Difference

git diff readme.txt

查看工作区与版本库最新版的差别。

git diff HEAD -- readme.txt

Inspect Log, History

git log
git log --pretty=oneline

git reflog

Rebase
把本地未push的分叉提交历史整理成直线

git rebase

Reset

git reset --hard HEAD^
git reset --hard 1094a

HEAD^ 表示上一版本;HEAD^^ 表示上上版本;HEAD~100 表示上100版本

Give up Commit

git checkout -- readme.txt

丢弃工作区的修改,不commit:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

如需把暂存区的修改退回到工作区,则执行

git reset HEAD -- readme.txt

Remove

git rm test.txt
git commit -m "remove test.txt"

从版本库删除文件。

Restore

git checkout ./test/test.txt

在.git目录下恢复。

2. Remote and Branch

Link Remote

git remote add origin https://github.com/xxx/learngit.git
git remote add origin git@github.com:xxx/learngit.git

link local repository with remote repository.

Remove Remote

git remote rm origin

查看远程分支

git branch -r
git branch -a # 查看所有分支

用checkout命令把远程分支取到本地,并自动建立tracking

git checkout -b dev origin/dev

Push to Remote

git push -u origin master

Following push

git push origin master

Push dev to remote

git push origin dev

生成key

ssh-keygen -t rsa -f ~/.ssh/id_rsa.repos1 -C “Key for repos1” # 如果没有-f选项,系统会提示输入保存文件名,默认~/.ssh/id_rsa
cat ~/.ssh/id_rsa.repos1.pub # 查看公钥内容

将公钥拷贝下来,输入到gitee的key新建中,之后不需要再输入密码就可以pull和push了

ubuntu 添加多个ssh公钥和私钥
linux管理多个ssh公钥密钥

ssh-keygen -t rsa -f ~/.ssh/id_rsa.repos2 -C “Key for repos2”

生成好了公钥和密钥后,将公钥添加到相应的git的仓库的key中,测试ssh

ssh-add id_rsa.repos1 id_rsa.repos2 # 添加公钥到列表
ssh-add -l # 查看rsa列表
ssh -T git@gitee.com

ssh默认只读取id_rsa的密钥,如果多个密钥,需要添加config文件,

cd  ~/.ssh
touch  config
chmod  600  ~/.ssh/config

在config添加如下内容,

Host         gitee.com
HostName     gitee.com
User 用户名
IdentityFile ~/.ssh/id_rsa.repos1

Clone Remote

git clone https://github.com/xxx/hello-world
git clone git@github.com:xxx/hello-world.git

Create Branch

Create and switch to branch

git checkout -b dev

Create branch

git branch dev

Switch to branch

git checkout dev

or

git switch -c dev

创建远程origin的分支到本地

git checkout -b dev origin/dev

Inspect Branch

git branch

Switch to Master

git checkout master

or

git switch master

Merge Branch

Merge branch (fast forward mode)

git merge dev

Non fast forward mode (recommended)

git merge --no-ff -m "merge with no-ff" dev

Delete Branch

git branch -d dev

Inspect Merge Graph

git log --graph

Stash
Store current work temporarily which not added or committed yet and then be free to switch to another branch to create new branch for solving bugs or issues.

git stash

Inspect temporarily stored work list

git stash list

Restore work

git stash pop

or

git stash apply
git stash drop

将一个分支修复的bug复制到当前分支

git cherry-pick <commit id>

开发一个新feature,最好新建一个分支。如果要丢弃一个没有被合并过的分支,可以通过以下命令强行删除。

git branch -D <name>

Inspect Remote

git remote -v

Update from Remote

git pull

Create Tag

git tag v1.0
git tag v0.9 f52c633
git tag -a v0.1 -m "version 0.1 released" 1094adb

Inspect Tag

git tag
git show v0.9

Remove Tag

git tag -d v1.0

Push tag to remote

git push origin v1.0
git push origin --tags

Remove tag from remote

git tag -d v1.0
git push origin :refs/tags/v0.9

3. 多人协作

Setup to track remote dev with local dev

git branch --set-upstream-to=origin/dev dev

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    3)如果合并有冲突,则解决冲突,并在本地提交;
    4)没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

4. 取消跟踪

参考博文
在git是用过程中,可能遇到以下情况:

  1. 被跟踪文件里面有不想跟踪的文件。
  2. 每次用git status查看状态时总是列出未被跟踪的文件。

解决方法:

  1. 当被跟踪的文件里面有不想跟踪的文件时,列出你需要取消跟踪的文件,可以查看列表,检查下是否有误操作导致一些不应该被取消的文件取消了,是为了再次确认的。
git rm -r -n --cached 文件或目录

-r 表示递归,
-n 表示先不删除,只是列出文件。
使用命令git rm删除文件,如删除readme1.txt的跟踪,并保留在本地:

git rm -r --cached readme1.txt 

删除readme1.txt的跟踪,并且删除本地文件:

git rm --f readme1.txt 

然后git commit即可,但是git status查看状态时还是会列出来。

  1. 每次用git status查看状态时总是列出未被跟踪的文件,可以通过.gitignore文件达到目的。

在仓库的根目录下建立.gitignore文件,在windows系统直接新建会提示无法建立以“.“开头的文件,可以在git bash中通过命令$touch .gitignore来建立文件。 此文件也需要被commit到库做版本管理。

使用如下语法进行填写文件:

/foldername/ :过滤整个文件夹
*.zip :过滤所有.zip文件
/ foldername/filename.c:过滤某个具体文件

被过滤掉的文件就不会出现在你的GitHub库中了,当然本地库中还有,只是push的时候不会上传。
需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中:

!*.zip
!/ foldername /filename.txt

唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。

为什么要有两种规则呢?想象一个场景:我们只需要管理/foldername/目录中的filename.txt文件,这个目录中的其他文件都不需要管理。那么我们就需要使用:

/foldername/
!/ foldername /filename.txt

假设我们只有过滤规则没有添加规则,那么我们就需要把/foldername/目录下除了filename.txt以外的所有文件都写出来!

最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。

5. 常见问题

远程更新,本地也更新,但双边没有同步,这种情况push时会提示错误:“error: failed to push some refs to”
解决办法
git pull --rebase origin master
git push origin master

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值